Sql server 我应该在具有索引主键的唯一列和具有多个值的键之间选择什么?

Sql server 我应该在具有索引主键的唯一列和具有多个值的键之间选择什么?,sql-server,database-design,many-to-many,Sql Server,Database Design,Many To Many,我有两张桌子,上面有很多关系。所以我使用第三个表将两个表映射到一起。我不知道我应该在拥有一个自动递增的整数主键,然后在其他主键上放置唯一的索引,还是使用一个有很多值的主键之间做出什么选择。每种方式的好处是什么 非常感谢在Microsoft SQL Server数据库中,主键约束和不可空列上的唯一约束之间没有显著差异。主键本质上只是语法上的糖。约定和个人偏好是使用主键约束的最常见原因 在任何DBMS中,真正重要的是您拥有什么键以及如何使用它们,而不是指定哪些键为“主键”。在数据建模的理论上,这两种

我有两张桌子,上面有很多关系。所以我使用第三个表将两个表映射到一起。我不知道我应该在拥有一个自动递增的整数主键,然后在其他主键上放置唯一的索引,还是使用一个有很多值的主键之间做出什么选择。每种方式的好处是什么


非常感谢

在Microsoft SQL Server数据库中,主键约束和不可空列上的唯一约束之间没有显著差异。主键本质上只是语法上的糖。约定和个人偏好是使用主键约束的最常见原因


在任何DBMS中,真正重要的是您拥有什么键以及如何使用它们,而不是指定哪些键为“主键”。

在数据建模的理论上,这两种解决方案都是正确的

但实际上:最好使用第二种解决方案
将新的自动增量ID设置为主键,并将两个传输的外键设置为唯一(一起)

优势:
数据冗余: 假设我们有两个名为A和B的表,AB是新创建的中间表(因为多对多关系)
现在,如果AB和C有一个新的关系(一对多),我们应该将AB的主键作为外键传输给C。所以最好转换ID而不是两个属性。同样,如果C与D有一个新的关系(一对多)。。。等等

缺点:
对IDs的访问性能:虽然第一个解决方案中存在冗余,但在不使用任何连接的情况下访问IDs的性能仍然存在。(假设在表C中,我们希望访问A和B ID。)但是仅访问ID并不常用