首页 > 解决方案 > 一对多关系:复合主键还是单主键?

问题描述

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

我设计了这样的架构: 在此处输入图像描述

person_contact我已经声明pcont_idperson_id作为 PK whileperson_id是一个 FK 引用person.person_id。我需要PKpcont_id吗?何时应在一对多关系中使用单个 PK,何时使用复合 PK 更好?

标签: databasedatabase-designrelational-database

解决方案


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

我需要PK pcont_id 吗?

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

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

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

何时应在一对多关系中使用单个 PK,何时使用复合 PK 更好?

junction table/associative table当您需要映射多对多关系时,使用复合主键。在一对多关系的情况下,您不需要带有外键列的复合主键。


推荐阅读