【问题标题】:Is it possible to have a foreign key which isn't covering the whole primary key of the referenced table?是否有可能有一个不覆盖被引用表的整个主键的外键?
【发布时间】:2011-08-14 08:17:44
【问题描述】:

我有两张桌子:

表 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 查询中的 987654325@。

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

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

提前非常感谢!

【问题讨论】:

  • 我不明白这句话但它肯定会始终引用表 A 中的唯一条目,因为...您能否澄清一下您的问题的那一部分?跨度>

标签: database composite-primary-key


【解决方案1】:

不,这是不允许的。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 2020-08-05
    • 2012-10-31
    • 2012-09-27
    • 2012-07-15
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多