代码之家  ›  专栏  ›  技术社区  ›  Tan Sang

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

  •  4
  • Tan Sang  · 技术社区  · 8 年前

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

    非常感谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Gholamali Irani    8 年前

    理论上 对于数据建模,两种解决方案都是正确的。

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

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

    缺点:
    IDs的访问性能 :虽然第一个解决方案中有冗余,但在不使用任何连接的情况下访问ID有一定的性能。(假设在表C中,我们希望访问A和B ID。) ,正在访问 只有 到IDs的使用不多。

        2
  •  1
  •   nvogel    8 年前

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

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