让我们假设有一个小型数据库,其中有表Person(ID, Name)
和Product(ID, Name, Color)
。 ID列显然是每个表的主键。我想像往常一样添加关联多对多表Order(PersonID, ProductID, Date)
。我有一个印象,表订购的主键是组合(PersonID, ProductID)
。但是在某些方面,建议组合(PersonID, ProductID, Date)
作为主键。有什么不同?我认为即使(PersonID, ProductID)
是主键,对于每个组合(PersonID, ProductID)
只对应一个日期。如果后面的情况是真的,应该在日期中包含主键?关联表中的主键
Q
关联表中的主键
2
A
回答
0
如果只能有一个与人员/产品组合关联的日期,那么PK应该是(PersonID, ProductId)
。如果可以有多个这样的关联,那么你应该只在012中包含Date
,并且日期是区别它们的。如果您不需要它时在PK中包含Date,那么如果您尝试使用相同的Person/Product而不是日期创建重复行,则数据库不会报告错误。
UPDATE:
你关于添加ID列注释使我意识到,这是不完全正确。您只需要声明(PersonID, ProductID)
作为唯一密钥,它不必是主密钥。然后你可以有一个ID字段作为主键;唯一的密钥将防止重复。如果您将Date
添加到PK,也可以做同样的事情。
但是,在正常规范化的数据库中,主键应该是表中唯一的唯一键。关系是Key-> Data的映射,PK应该反映这个映射。
相关问题
- 1. 联接表(关联表)是否有主键?多对多关系
- 2. Belongs_to与主键和外键的关联
- 3. Rails:覆盖关联主键
- 4. 关于表中的主键?
- 5. 如何将关联列之一用作Grails中表的主键?
- 6. 其主键为cakephp中的外键的关联模型?
- 7. 使用自定义连接表主键关联多个关系
- 8. SQLAlchemy - 与主关联中的关联表和日期问题
- 9. cakephp映射$ belongsTo关联到非主键
- 10. 表外键/自身关联?
- 11. “主键”关键字如何与SQL Server中的聚集索引相关联?
- 12. 休眠与主键作为外键的双向关联
- 13. 如何使用主键概念关联3个表
- 14. 联盟的关键
- 15. 主动模型串行器,呈现无关键的关联
- 16. 从主列表中筛选关键字
- 17. Rails 3.0.5 belongs_to关联没有更新声明类中的主键
- 18. 如何在Spring中更新与主键关联的值-JPA
- 19. 没有在Rails中获取关联对象的主键
- 20. 查询在关联表的外键
- 21. 与关联表相同的外键?
- 22. 主键关系的外键
- 23. EF不会从表中的外键生成外键关联
- 24. 关联关联表
- 25. 在SQLite3中关联外键
- 26. 变换关键字参数到关联列表中的Lisp
- 27. ASP.net - 试图将一个主键与多个外键关联
- 28. 返回表主键名与表网关
- 29. 主义态关联
- 30. 为什么SQLAlchemy关联对象中的外键标记为主键?
好的,自从我写下这个问题以来,我一直在仔细考虑,并得出了与答案中所述相同的结论。然而,它让我感到将日期添加到PK与将关键字添加到关联表相同,这是不恰当的。有一个共同的和可以接受的方法来克服这个问题吗? – arjacsoh
查看关于唯一密钥verus主键的更新。 – Barmar