database - 是否有可能有一个不覆盖引用表的整个主键的外键?

标签 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 的指定使用月份。

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

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

提前致谢!

最佳答案

不,这是不允许的。

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

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

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

关于database - 是否有可能有一个不覆盖引用表的整个主键的外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055776/

相关文章:

java - JPA注释复合主键也是一对多外键

java - Android 和 MongoDB 存储和检索数据

database - 我如何告诉数据库只返回离散部分的数据?

android - 为什么我的 Android SQLite 数据库突然损坏了?

Mysql Select record where PRIMARY key = x

sql - 一个表怎么会违反它自己的主键索引呢?

mysql - 记录测试结果的数据库设计

ruby-on-rails - Rails Active Record - counter_cache 仅返回给定时间段内的记录

hibernate - 在 JPA 条件中具有复合主键的 IN 子句

mysql - 外键: Unique & part of Composite Primary Key