我有两个表:
表 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
的指定使用月份。
现在我的问题是,这是允许的还是我违反了数据库设计的几条规则?
我真的很感激一个很好的答案,因为我会在我必须为我的学士学位写的最终文件中使用它。
提前致谢!
最佳答案
不,这是不允许的。
如果您有一个由多列组成的复合主键,您的外键也必须是复合并引用主键中涉及的所有列。
外键必须引用主键,整个键,只有键(所以帮助你 Codd):-)
您可以做的是在 Table A
中的 A_CommonID
列上有一个单独的唯一索引,以便您的 Table B
可以引用该唯一索引(而不是 PK)。
关于database - 是否有可能有一个不覆盖引用表的整个主键的外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055776/