数据库属性可以是主键还是外键?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库属性可以是主键还是外键?相关的知识,希望对你有一定的参考价值。
我有2张桌子,User
和Employee
。每个用户都有一个User_ID
,这是User
表中的主键和Employee
表中的外键。 Employee
表中的该属性也可以是主键吗?
如果两个表之间具有一对一的关系,则详细信息表的主键也是外键。
master detail (1 : 1)
+----------+ 1:1 +-------------+
| PK id |<---o| PK FK id |
+----------+ +-------------+
| col1 | | col1 |
| col2 | | col2 |
| etc. | | etc. |
+----------+ +-------------+
如果您具有m-to-n关系,则联结表具有与m和n表的两个主键相关的列。这些列同时是主键和外键。
m : n
m_table junction
+----------+ 1:m +------------+ n_table
| PK id1 |<---o| PK FK1 id1 | n:1 +----------+
+----------+ | PK FK2 id2 |o--->| PK id2 |
| col1 | +------------+ +----------+
| col2 | | | | col1 |
| etc. | +------------+ | etc. |
+----------+ +----------+
请注意,使用此构造时,一个表的记录只能链接到另一个表的特定记录一次,因为联结表的每个复合主键必须是唯一的。如果要允许非唯一配对,请在联结表中定义单独的主键:
m : n
junction
+---------+
m_table | PK id |
+----------+ 1:m +---------+ n_table
| PK id1 |<---o| FK1 id1 | n:1 +----------+
+----------+ | FK2 id2 |o--->| PK id2 |
| col1 | | | +----------+
| col2 | +---------+ | col1 |
| etc. | | etc. |
+----------+ +----------+
在这种情况下,主键和外键约束设置在不同的列上。或者,您也可以使用两个外键以及一个分子或另一个辨别属性来构建主键。
在你的情况下,如果User
和Employee
之间存在一对一或一对一或一对一的关系,那么是的,User_ID
表中的Employee
可以是外键(FK)和主键( PK)同时。换句话说,这意味着:用户也可以是员工,在这种情况下,员工数据将附加到用户。如果他不是雇员(他可能是外部专家),则不附加员工记录。如果User_ID
在Employee
中是FK和PK,则每个用户最多可以附加一个员工记录。如果User_ID
在表Employee
中只是FK而不是PK,那么用户可以拥有多个相关的员工记录。
是。例如,如果您想强制所有员工都是用户,而某些用户可以是员工,那么您可以这样做。这将是(零或一)到一个关系。
否则,您通常不会使主键与外键相同,尽管它可能包含外键,就像多表关系的联结表一样。
以上是关于数据库属性可以是主键还是外键?的主要内容,如果未能解决你的问题,请参考以下文章