是否可以使用未覆盖引用表的整个主键的外键?

时间:2011-08-14 08:17:44

标签: database composite-primary-key

我有两张桌子:

表A:使用复合主键。

CommonID (PK) | Month (PK) | some data...
-----------------------------------------
1             | May 2011   | ...
1             | June 2011  | ...
2             | May 2011   | ...
2             | June 2011  | ...

表B:参考表A

ID (PK) | A_CommonID (FK)| some data...
-----------------------------------------
...     | 1              | ...
...     | 2              | ...

正如您所看到的,表B并未引用整个主键,但它肯定会始终引用表A中的唯一条目,因为指定的已用月份具有全局值这将在SQL查询中用于A.Month

现在我的问题是,是允许还是我违反了数据库设计的几条规则?

我真的很感激一个很好的答案,因为我会在最后的文件中使用它,我必须为我的学士学位写作。

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

不,这是不允许的。

如果您的复合主键包含多个列,则您的外键也必须复合,并引用主键中涉及的所有列。< / p>

外键必须引用主键,整个键以及除键之外的任何内容(所以帮助你Codd): - )

您可以做的是在A_CommonID中的Table A列上设置单独的唯一索引,以便您的Table B可以引用该唯一索引(而不是PK)