2

我有两张桌子:

表 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因为指定使用的月份有一个全局值,将用于A.MonthSQL 查询。

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

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

提前非常感谢!

4

1 回答 1

1

不,这是不允许的。

如果您有一个由多个列组成的复合主键,则您的外键也必须是复合的,并且引用您的主键中涉及的所有列。

外键必须引用主键,整个键,只有键(所以帮助你 Codd):-)

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

于 2011-08-14T08:28:37.730 回答