一对多关系:复合主键还是单个主键?

时间:2018-05-14 10:31:39

标签: database database-design relational-database

我有一个包含个人信息的表person,我还有另一个表person_contact来存储有关该人的联系信息(type显示是否是电话记录或电子邮件记录,以及record包含实际的电话号码或电子邮件地址。

我设计了这样的架构: enter image description here

person_contact我已将pcont_idperson_id声明为PK,而person_id是引用person.person_id的FK。我是否需要PK pcont_id?我应该何时在一对多关系中使用单个PK,何时使用复合PK更好?

1 个答案:

答案 0 :(得分:1)

您不需要person_id作为person_contact表中主键的一部分。如果两个表之间存在一对多的关系,pcont_id应该是主键。

  

我是否需要PK pcont_id?

我建议,它应该在那里,并且应该是您桌子的主键,假设您可以为一个人拥有多个联系人。

如果一个人只能有一个联系人,那么在这种情况下您不需要该表,您可以直接将数据存储在人员表中。

如果您仍想单独存储,那么您不需要pcont_id列,您的person_id列应标记为主键。

  

我应该何时在一对多关系中使用单个PK以及何时使用   使用复合PK更好吗?

当您使用junction table/associative table映射多对多关系时,将使用复合主键。如果是一对多关系,您不需要使用外键列的复合主键。