我在表格中有一个复合PK(整数id,varchar(2)lang)
我想从其他表中创建一个FK到只有PK的一半。这意味着我在Strings表(翻译)中可能有许多与FK匹配的行。我只需要存储id,并且具有由DB维护的引用完整性。
这可能吗?如果是这样,怎么样?
答案 0 :(得分:3)
这是wiki
引用表中的列 必须是主键或其他 引用表中的候选键。引用列的一行中的值必须出现在引用表中的单个行中。
假设你有这个:
id | var
1 | 10
1 | 11
2 | 10
外键必须从引用的表中引用恰好一行。这就是通常它引用主键的原因。
在您的情况下,您需要在存储ID的位置创建另一个Table1(id)并使列成为唯一/主键。当前表中的id列不是唯一的 - 你不能在你的情况下使用它...所以你创建一个Table1(id - 主键)并使当前表中的id成为一个外键表1 即可。现在,您可以在Table1中为id创建外键,并且当前表中的主键是可以的。