【发布时间】:2014-10-01 18:17:33
【问题描述】:
我有一个语言映射表,每个条目都有可能与几个不同的表建立外键关系。 处理此配置的最佳模式是什么?
表格: LanguageMap、TableA、TableB
这是两种可能性:
1.查找列方法 - 无外键约束:
Create Table LanguageMap (
Id int not null primary key,
Language nvarchar not null,
Value nvarchar not null,
Type nvarchar not null, -- 'TableA', 'TableB', etc.
ForeignTableId int not null -- Is Foreign key to another table dependent on the type of the row.
)
2。多个外键列
create Table LanguageMap(
Id int not null primary key,
Language nvarchar not null,
Value nvarchar not null,
Type nvarchar not null, -- 'Activity', 'Verb', etc.
TableAId int null,
TableBId int null
)
alter table LanguageMap add constraint FK_LanguageMap_TableA
foreign key (TableAId) references TableA (Id)
alter table LanguageMap add constraint FK_LanguageMap_TableA
foreign key (TableBId) references TableB (Id)
alter table LanguageMap add constraint CK_LanguageMap_OneIsNotNull
check (TableAId is not null or TableBId is not null)
go
alter table LanguageMap add constraint CK_LanguageMap_OneIsNull
check (TableAId is null or TableBId is null)
go
【问题讨论】:
-
您能显示一些示例数据以澄清tablea和tableb中存储的内容吗?它们是否具有彼此相同的架构。此外,您链接到的是否只有 2 个不同的表,或者出于此问题的目的,它是否仅限于 2 个?
-
我仍在写架构,所以我不确定会有多少桌子。但是假设架构会完全不同,并且至少会有四个:即 TableA、TableB、TableC、TableD。也许更多。为什么样本数据相关?
-
我试图解决表格中的模式/数据是否相似。
标签: sql-server database-design