【问题标题】:One-to-many relationship: composite primary key or single primary key?一对多关系:复合主键还是单主键?
【发布时间】:2018-05-14 18:57:59
【问题描述】:
我有一个表 person 包含个人信息,我还有另一个表 person_contact 来存储有关该人的联系信息(type 显示它是电话记录还是电子邮件记录,record 包含实际电话号码或电子邮件地址)。
我设计了这样的架构:
在person_contact 中,我将pcont_id 和person_id 声明为PK,而person_id 是引用person.person_id 的FK。我需要PKpcont_id吗?何时应在一对多关系中使用单个 PK,何时使用复合 PK 更好?
【问题讨论】:
标签:
database
database-design
relational-database
【解决方案1】:
您不需要将person_id 作为person_contact 表中主键的一部分。如果两个表之间存在一对多关系,pcont_id 应该是主键。
我需要 PK pcont_id 吗?
我建议,它应该在那里并且应该是您的表的主键,假设您可以为一个人拥有多个联系人。
如果一个人只能有一个联系人,在这种情况下您不需要该表本身,您可以将数据直接存储在人员表中。
如果您仍想单独存储,则不需要pcont_id 列,您的person_id 列应标记为主键。
何时应在一对多关系中使用单个 PK 以及何时
是不是用复合PK比较好?
当您有 junction table/associative table 来映射多对多关系时,使用复合主键。如果是一对多关系,则不需要复合主键和外键列。