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