【问题标题】:Does Details-table contain ID column in Master-Detail relationship?Details-table 是否包含主从关系中的 ID 列?
【发布时间】:2010-01-06 15:52:31
【问题描述】:

在主从关系中,明细表是否包含 ID 列?

或者,应该吗?

在 Northwind 数据库中,OrderDetail 没有 ID 列。

【问题讨论】:

    标签: database-design relationships


    【解决方案1】:

    您拥有的任何包含您希望能够检索的内容的数据表都应该始终包含一个主键 - 这是它的主要工作:唯一标识一行。

    仅仅因为详细信息属于主行并不意味着它们本身不是完整的数据行 - 它们需要以某种方式被识别。

    所以是的 - 我建议任何明细表都有某种形式的主键(“ID”)。是否以某种方式连接到主 ID 是您可能会根据具体情况决定的事情 - 但有一种方法可以以某种方式独立识别每个详细信息行。

    如果您有一个 M:N 关系的链接表,通常情况下,您只有两个外键列(用于表 1 和 2)。这通常已经足够好了,因为这两个 FK 的组合是独一无二的。

    向此类表添加单独 ID 的唯一原因是您需要添加描述关系本身的附加信息。但即便如此,只要 (key1, key2) 组合是唯一的,这通常就足够了。

    【讨论】:

    • 在 Northwind 数据库中,OrderDetail 没有 ID 列。您对 M-to-M 关系的联接表中有一个 ID 列有何评论?
    • 是的,Northwind。[Order Details] 使用 (OrderID,ProductID) 的组合作为其 PK。只要您永远不会有两个引用同一产品的订单行,那就可以了。我不认为这种设置很聪明——在这种情况下,我个人会使用单独的 OrderDetailsID。
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多