首页 文章

关联表中的主键

提问于
浏览
3

假设有一个包含表 Person(ID, Name)Product(ID, Name, Color) 的小型数据库 . ID列显然是每个表的主键 . 我想像往常一样添加一个关联多对多表 Order(PersonID, ProductID, Date) . 我的印象是表Order的主键是组合 (PersonID, ProductID) . 但是在一些方法中,建议将组合 (PersonID, ProductID, Date) 作为主键 . 有什么不同?我认为即使 (PersonID, ProductID) 是主键,每个组合 (PersonID, ProductID) 只对应一个日期 . 如果后者为真,何时应将日期包含在主键中?

1 回答

  • 1

    如果只有一个日期与人员/产品组合相关联,那么PK应为 (PersonID, ProductId) . 如果可以有多个这样的关联,那么你应该只在PK中包含 Date ,并且日期是它们的区别 . 如果您在尝试创建具有相同人员/产品但具有不同日期的重复行时报告错误,则在PK中包含日期 .

    更新:

    您对添加ID列的评论让我意识到这不太对 . 您只需将 (PersonID, ProductID) 声明为唯一键,它不必是主键 . 然后,您可以将ID字段作为主键;唯一键将防止重复 . 如果您将 Date 添加到PK,则可以执行相同的操作 .

    但是,在正确规范化的数据库中,主键应该是表中唯一的唯一键 . 关系是Key-> Data的映射,PK应该反映这种映射 .

相关问题