表中主键的最佳实践是什么?
在设计表格时,我养成了一种习惯,就是有一列是唯一的,我做主键。实现这一目标的方式有三种,视需要而定:
- 自动递增的标识整数列。
- 唯一标识符(GUID)
- 一个短字符(X)或整数(或其他相对较小的数字类型)列,可用作行标识符列。
数字3将用于相当小的查找,大多数是读取表,这些表可能具有唯一的静态长度字符串代码,或数字值(如年份或其他数字)。
在大多数情况下,所有其他表都将具有自动递增整数或唯一标识符主键。
问题:-)
我最近已经开始使用没有一致行标识符的数据库,并且主键当前聚集在不同的列中。一些例子:
- 日期时间/字符
- 日期时间/整数
- 日期时间/varchar
- Char/nvarchar/nvarchar
这有正当理由吗?我会一直为这些情况定义标识或唯一标识符列。
此外,还有许多表根本没有主键。这样做的有效理由(如果有的话)是什么?
我试着去理解为什么桌子是按原来的设计的,对我来说,这似乎是一堆乱七八糟的东西,但也许这是有充分理由的。
第三个问题可以帮助我破译答案:在使用多个列组成复合主键的情况下,这种方法相对于代理/人工密钥有什么特殊的优势吗?我主要考虑的是性能、维护、管理等?