假设有一个带有表Person(ID, Name)
和Product(ID, Name, Color)
. ID 列显然是每个表的主键。我想像往常一样添加一个关联 Many-to-Many table Order(PersonID, ProductID, Date)
。我的印象是 Order 表的 Primary Key 是组合(PersonID, ProductID)
。但是在某些方法中,(PersonID, ProductID, Date)
建议将组合作为主键。有什么区别?我认为即使(PersonID, ProductID)
是主键,每个组合也(PersonID, ProductID)
只对应一个日期。如果后者是真的,什么时候应该在主键中包含日期?
问问题
3888 次
1 回答
1
如果只有一个日期与人员/产品组合相关联,则 PK 应该是(PersonID, ProductId)
。如果可以有多个这样的关联,您应该只Date
在 PK 中包含 ,并且日期是它们的区别。如果您在不需要时将 Date 包含在 PK 中,如果您尝试创建具有相同 Person/Product 但不同日期的重复行,数据库将不会报告错误。
更新:
您关于添加 ID 列的评论使我意识到这不太正确。您只需要声明(PersonID, ProductID)
为唯一键,它不必是主键。然后,您可以将 ID 字段作为主键;唯一键将防止重复。如果您将 PK 添加Date
到 PK 中,则可以执行相同的操作。
但是,在正确规范化的数据库中,主键应该是表中唯一的唯一键。关系是 Key->Data 的映射,PK 应该反映这个映射。
于 2012-11-01T08:46:41.253 回答