3

假设有一个带有表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)只对应一个日期。如果后者是真的,什么时候应该在主键中包含日期?

4

1 回答 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 回答