我有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
定义为外键,而它们一起是主键?
答案 0 :(得分:3)
是的,绝对。你没有提到你正在使用哪个关系数据库,但这是常见的做法,并且在我所知道的所有关系数据库中都是允许的。
我尝试了另外的解释: -
主键和外键更像是“理论”的东西而不是硬物理的东西。在查看螺母和螺栓时,我发现只考虑索引和约束,而不是“密钥”本身是有用的
以这种方式思考“主键”实际上是两个独立事物的组合: -
实践中的“外键”只是一种约束,与独特的关键约束没有多大区别。它检查另一个表中是否存在记录,并拒绝任何尝试创建在引用表中没有相应条目的记录。
没有理由你不能在同一个字段上有多个约束(它既是唯一的又存在于另一个表中),并且表中的任何索引都不会阻止你添加任何你喜欢的约束。因此,具有与主键的一部分相同的字段并且还具有外键约束是没有问题的。