首页 文章

如果要从另一个表引用关联表,我是否应该有一个主键

提问于
浏览
0

我正在为 properties 和住宅数据库创建一个数据库 .

这是要求 .

  • 所有者可以拥有许多房产 .

  • property 可以拥有许多所有者(与配偶,亲属等共同拥有)

所以我有一个关联表,因为Owner-Property是一个多对多的关系 .

Owner_Property

  • 第一个属性:所有者ID(FK到所有者表)

  • 第二个属性:属性批次ID(FK到属性表)

确定后,我还需要存储特定所有者在相关 property 中停留的月份的信息 .

所以我考虑创建另一个关联实体 Duration_of_stay_at_Property ,其中第一个属性是 month_id ,另一个属性将链接回 Owner_property 表,通过Fk链接到复合键或者必须在 Owner_property 表中创建的主键 .

您对PK /复合决策有何建议?你想建议设计有什么改进吗?

4 回答

  • 1

    你似乎想要一个“所有者保持”的关系 . 我将假设这种关系总是属于所有者拥有的 property (而不是任何旧 property ) . 也就是说,这可能不包括所有时间范围,因为所有者也可能会撕毁属性 .

    所以,这表明像 staying 这样的表具有以下属性:

    • 所有者/属性主键

    • 开始日期

    • 结束日期

    • 任何其他相关信息

    这表明您需要 owner/ property`关系上的单列主键 .

  • 1

    ...需要存储特定所有者在相关房产中停留的月份的信息......

    这句话公开表明你需要一个具有三列复合键的新实体 . 像:

    dwelling (month, owner_id (FK), property_id (FK))
    

    有时,当您有与 dwelling 相关的额外实体时,您可以在其中添加额外的单列PK,请记住您还需要保留主要的唯一约束 . 就像是:

    dwelling (dwelling_id, month, owner_id (FK), property_id (FK))
      + constraint unique (month, owner_id, property_id)
    
  • 1

    我会寻求以下解决方案:

    • 在表 Owner_Property 中添加主键

    • Duration_of_stay_at_Property 链接到 Owner_Property 的主键(以及其他信息,例如逗留月份)

    这背后的理由:

    • 在大多数表中使用主键通常是一种好习惯

    • 主键将消除 Duration_of_stay_at_Property 上对复合foregin键的需要(没有主键,您需要两列与 Owner_Property 中的行相关)

  • 1

    我建议所有权(许多:业主和 property 之间的许多映射)独立于谁,何时 . 制作两张桌子 .

    owner_property表应该有两列(没有auto_increment); PK应该有两列,你可能需要一个索引,列的顺序相反 . More discussion and tips

    另一个表将具有相同的两列,以及与占用时间(或时间范围)有关的内容 . PK和二级索引将取决于您希望执行的查询 . 如果没有人在某个特定属性中,那么该属性就没有行 . 繁忙的 property 可能有数千行 - 与所有权表没有任何关系 .

    (好吧,我几乎都在说其他答案说的话 . )

相关问题