在设计表格时,我养成了一个习惯,即拥有一个唯一的列并且我将其作为主键。这可以根据要求通过三种方式实现:
- 自动递增的标识整数列。
- 唯一标识符 (GUID)
- 可用作行标识符列的短字符 (x) 或整数(或其他相对较小的数字类型)列
数字 3 将用于相当小的查找,主要是读取可能具有唯一静态长度字符串代码或数值(例如年份或其他数字)的表。
在大多数情况下,所有其他表都将具有自动递增的整数或唯一标识符主键。
问题:-)
我最近开始使用没有一致行标识符的数据库,并且主键当前聚集在各个列中。一些例子:
- 日期时间/字符
- 日期时间/整数
- 日期时间/varchar
- 字符/nvarchar/nvarchar
这有一个有效的案例吗?我总是会为这些情况定义一个身份或唯一标识符列。
此外,还有很多表根本没有主键。有什么正当理由(如果有的话)?
我试图理解为什么桌子被设计成原来的样子,这对我来说似乎是一团糟,但也许有很好的理由。
第三个问题可以帮助我破译答案:在使用多列组成复合主键的情况下,这种方法与代理/人工键相比是否有特定优势?我主要考虑性能、维护、管理等方面的问题?