代替具有复合主键(此表维护代表两个实体 [两个表] 的两个表之间的关系),该设计建议将identity
列作为主键,并且在代表两个列的两个列上强制执行唯一数据约束来自实体主键的数据。
对我来说,每个关系表都有标识列违反了规范化规则。
- 行业标准是什么?
- 在对此做出设计决定之前要考虑哪些因素?
- 哪种方法是正确的?
代替具有复合主键(此表维护代表两个实体 [两个表] 的两个表之间的关系),该设计建议将identity
列作为主键,并且在代表两个列的两个列上强制执行唯一数据约束来自实体主键的数据。
对我来说,每个关系表都有标识列违反了规范化规则。
有很多表,您可能希望将标识列作为主键。但是,对于您描述的 M:M 关系表,最佳做法是不要为主键使用新的标识列。
RTomas 在他的评论中的链接提供了最佳实践是不添加标识列的绝佳理由。这是那个链接。
在几乎所有情况下,缺点都会超过优点,但既然你问了优点和缺点,我也放了几个不太可能的优点。
缺点
增加复杂性
除非您对关系强制执行唯一性(默认情况下主键会这样做),否则可能会导致重复关系。
可能更慢:db 必须维护两个索引而不是一个。
优点
所有的专业人士都很粗略
如果您遇到需要使用关系表的主键作为单独表(例如审计表?)的连接的情况,连接可能会更快。(尽管如前所述 - 添加和删除记录可能会更慢。此外,如果您的关系表是本身使用唯一 ID 的表之间的关系,则在连接中使用一个标识列与两个标识列的速度增加将是最小的。)
为简单起见,应用程序可以假设它使用的每个表都有一个唯一的 ID 作为其主键。(这是应用程序中糟糕的设计,但您可能无法控制它。)您可以想象这样一种情况,在数据库中引入一些额外的复杂性比在这样的应用程序中引入额外的复杂性更好。
您必须在每个表中创建用作外键的所有列。这是最大的缺点。
缺点:
优点: