我有两张桌子:
表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
。
现在我的问题是,是允许还是我违反了数据库设计的几条规则?
我真的很感激一个很好的答案,因为我会在最后的文件中使用它,我必须为我的学士学位写作。
提前多多感谢!
答案 0 :(得分:1)
不,这是不允许的。
如果您的复合主键包含多个列,则您的外键也必须复合,并引用主键中涉及的所有列。< / p>
外键必须引用主键,整个键以及除键之外的任何内容(所以帮助你Codd): - )
您可以做的是在A_CommonID
中的Table A
列上设置单独的唯一索引,以便您的Table B
可以引用该唯一索引(而不是PK)