我有 3 个表:users
、pages
和 users_pages
Users Table
+----+------+-----
| id | name | ...
+----+------+-----
Pages Table
+----+------+-----
| id | name | ...
+----+------+-----
users_pages table, which says, which user is admin of which page.
+---------+---------+
| user_id | page_id |
+---------+---------+
| 1 | 1 | // means, user 1 is admin of page 1
+---------+---------+
在users_pages
表中,user_id
和page_id
的组合是一个复合键(主键)
是否可以将 user_id
和 page_id
定义为外键,而它们一起是主键?
最佳答案
是的,当然。您没有提到您使用的是哪种关系数据库,但这是常见做法,并且在我所知道的所有关系数据库中都是允许的。
我的额外解释尝试:-
主键和外键更像是“理论”事物,而不是硬物理事物。在查看具体细节时,我发现仅考虑索引和约束而不是“键”本身是很有用的
这样想,“主键”实际上是两个独立事物的组合:-
- 一个独特的约束。这会检查并拒绝任何尝试 创建副本。
- 基于字段的索引。这只是让 如果您使用该字段查看,检索记录会快得多 向上(从表中选择 *,其中 pkey = 'x')
“外键”在实践中只是一种约束,与唯一键约束没有太大区别。它检查其他表中是否存在记录,并拒绝任何创建在所引用表中没有相应条目的记录的尝试。
没有理由不能在同一个字段上有多个约束(它既是唯一的又存在于另一个表中),并且表上的任何索引都不会阻止您添加任何您喜欢的约束。因此,将相同的字段作为主键的一部分是没有问题的,它也有外键约束。
关于mysql - 一个字段中的主键和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20803452/