不是使用复合主键(此表维护表示两个实体[两个表]的两个表之间的关系),而是建议将identity
列作为主键和唯一数据约束强制执行两列,代表实体主键的数据。
对于我来说,每个关系表的标识列都违反了规范化规则。
答案 0 :(得分:6)
有许多表可能需要将标识列作为主键。但是,对于您描述的M:M关系表,最佳做法是不要为主键使用新的标识列。
RThomas在评论中的链接提供了最佳做法是不添加标识列的绝佳理由。这是that link。
几乎在每种情况下,利弊都会超过职业选手,但是既然你要求利弊我也会把几个不太可能的职业选手放进去。<强>缺点强>
添加复杂性
除非您对关系强制执行唯一性(默认情况下主键会执行此操作),否则会导致重复关系。
可能更慢:db必须维护两个索引而不是一个。
<强>赞成强>
所有职业选手都非常粗略
如果您需要使用关系表的主键作为单独表(例如审计表?)的连接,则连接可能会更快。 (如上所述 - 添加和删除记录可能会更慢。此外,如果您的关系表是自己使用唯一ID的表之间的关系,则使用连接中的一个标识列与两个标识列的速度增加将是最小的。)
为简单起见,应用程序可能会假设它使用的每个表都有一个唯一的ID作为其主键。 (这在应用程序中的设计很糟糕,但你可能无法控制它。)你可以想象一个场景,在数据库中引入一些额外的复杂性比在这样的应用程序中增加额外的复杂性更好。
答案 1 :(得分:2)
<强>缺点:强>
优点:
答案 2 :(得分:2)
您必须在每个表中创建所有列,无论它们用作外键。这是最大的劣势。