在主从关系中,明细表是否包含 ID 列?
或者,应该吗?
在 Northwind 数据库中,OrderDetail 没有 ID 列。
您拥有的任何包含您希望能够检索的内容的数据表都应该始终包含一个主键 - 这是它的主要工作:唯一标识单行。
仅仅因为详细信息属于主行并不意味着它们本身不是完整的数据行——它们需要以某种方式被识别。
所以是的 - 我会推荐任何明细表都有某种形式的主键(“ID”)。这是否以某种方式连接到主 ID 是您可能会根据具体情况决定的事情 - 但有一种方法可以以某种方式独立识别每个详细信息行。
如果您有一个 M:N 关系的链接表,通常情况下,您只有两个外键列(用于表 1 和 2)。这通常已经足够好了,因为这两个 FK 的组合是独一无二的。
向此类表添加单独 ID 的唯一原因是您需要添加描述关系本身的附加信息。但即便如此,只要 (key1, key2) 组合是唯一的,这通常就足够了。