具有UNIQUE约束的NVARCHAR或INT主键

时间:2016-05-13 12:08:13

标签: database database-design

我有字母数字数据,最大长度为20个字符。我将把这些数据存储在类型NVARCHAR(20)

的列中

这些数据是CODES,必须是唯一的,因此我决定将其作为主键列。

但是,在询问another question时,有人“建议”我使用INT列作为主键。

你怎么看?一个INT主键并添加一个UNIQUE约束或我当前设计的列?

我想我正在添加一个我不打算使用的新列,因为我需要NVARCHAR(20)列进行搜索,并避免重复。换句话说,99%的where子句将具有NVARCHAR列。

1 个答案:

答案 0 :(得分:1)

我是数字合成主键的忠实粉丝。您想要的密钥可以声明为unique,并且是密钥的属性。

以下是一些原因:

  • 数字键占用4或8个字节,并且具有固定长度。这对于构建索引更有效。
  • 数字键通常比字符串键短。这节省了外键引用的空间。
  • 通常使用自动递增列插入合成键。这让你知道插入顺序。注意:在某些应用程序中,了解订单可能是一个缺点,但这些都是不寻常的。
  • 如果唯一字符串的值发生更改,则只需在一个位置更改该值 - 而不是在每个具有外键引用的表中更改。而且,如果省略外键引用,那么数据库完整性就会受到威胁。
  • 如果某行由多个键标识,则单个数字键的效率会更高。
  • 合成密钥可以帮助维护安全性。

这些只是指导原则 - 您的问题是合成数字键是个好主意的原因。还有其他问题。例如,如果空间使用是一个非常大的问题,那么数字键的额外空间加上唯一索引可能会否定其他问题。