【问题标题】: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_idperson_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 来映射多对多关系时,使用复合主键。如果是一对多关系,则不需要复合主键和外键列。

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2012-12-14
    • 2014-11-22
    相关资源
    最近更新 更多