【问题标题】:multiple colums primery keys vs one primery key with unique constraints多列主键与具有唯一约束的一个主键
【发布时间】:2015-03-09 11:08:58
【问题描述】:

我的数据库中有一个大表(50 列,可能达到 100,000,000 行)。 现在我的主键是 8 列。

最好做1个主键(自动编号)并添加列唯一约束?

【问题讨论】:

  • 听起来你的表是标准化的重要候选者。也就是说,你的问题有点模糊。更多细节将有助于获得好的答案

标签: sql sql-server


【解决方案1】:

数据库的结构应该由数据的使用方式决定。例如,可以判断结构是规范化的还是非规范化的。但是这些方法中的每一种都适用于不同的情况。

也就是说,我非常倾向于在所有表中都有一个自动递增(“身份”)主键。这在许多情况下都是有益的。以下是三个原因:

  • 用于了解行的插入顺序(非常接近)。
  • 用于创建外键关系。
  • 确保您可以唯一标识每一行以进行更新和删除。

但是,这样的列会占用更多的存储空间。而且,单个主键索引比具有多个索引更有效(在空间方面)。

这不是对您问题的直接回答,但它至少为您提供了一些思考问题的参数。

【讨论】:

    【解决方案2】:

    通常当您不了解时,最好遵循数据库设计中的标准指南。因为它们适用于绝大多数情况,而且出错的可能性较小。

    在这种情况下,这意味着您非常可能会从使用自动递增的 ID 列作为聚集主键索引中受益。以及向所有引用列添加外键和非聚集索引,以防您尚未这样做。

    最后,您甚至可以考虑添加一些专门为最慢查询设计的自定义(甚至多列)索引...基本上,如果您有一些问题查询,您希望在其 WHERE 子句中对列进行索引。

    除此之外,您当然应该查看表和数据库是否已正常化。要了解规范化,最好用谷歌搜索。这不是一个复杂或困难的概念,但有上千个教程比我们这里更适合解释这个概念。

    通过这样做,您很可能会朝着正确的方向前进。如果它不起作用,那么这里的人们可以使用更多信息来确定最佳替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多