142

命名约定很重要,主键和外键具有常用且明显的约定(分别为PK_Table和)。FK_Table_ReferencedTable索引的IX_Table_Column命名也相当标准。

UNIQUE 约束呢?此约束是否有普遍接受的命名约定?我见过UK_TableName_Column,UQ_TableName_Column和有人推荐AX_TableName_Column- 我不知道这是从哪里来的。

我通常使用过UQ,但我不是特别喜欢它,而且我不喜欢为自己选择使用它而反对UK倡导者辩护。

我只是想看看是否就最流行的命名达成共识,或者对为什么一个比其他更有意义的一个很好的推理。

4

3 回答 3

155

我对索引和约束的命名约定:

索引/约束类型 命名约定
首要的关键 <表名>_PK
唯一索引/约束 <表名>_AK{xx}
非唯一索引 <表名>_IX{xx}
检查约束 <表名>_CK{xx}
默认约束 <表名>_DF{xx}
外键约束 <表名>_FK{xx}

其中{xx}是 2 位序列号,从 01 开始,表示每个表的每个约束类型。主键没有序列号,因为只能有一个。2 个字符的 alpha 后缀含义是:

后缀 意义
PK _ _
AK 备用键_ _
FK _ _
IX 索引X _
CK _
DF 默认故障_ _

我通常希望按控制对象而不是按对象类型对元数据/系统目录数据进行分组。

于 2011-01-29T19:24:17.503 回答
59

我的想法是它不是关键:它是一个约束。

它当然可以用作键,并且唯一标识一行,但它不是键。

例如,键是“ThingID”,它是替代自然ThingName 的代理键。您仍然需要约束ThingName:但它不会用作键。

我也会使用 UQ 和 UQC(如果集群)。

您可以改用唯一索引并选择“IXU”。根据所采用的逻辑,索引也是键,但仅在唯一时。否则它是一个索引。那么我们将从IK_columnname唯一索引和IX_columnname非唯一索引开始。奇妙。

唯一约束和唯一索引之间的唯一区别是 INCLUDE 列。

编辑:2013 年 2 月。自 SQL Server 2008 以来,索引也可以有过滤器。约束不能

所以,它归结为之一

  • 根据使用 SQL 的星球的其他部分,坚持使用 UQ
  • 将 IK 用于唯一索引(IKC 也用于集群)以保持一致......
于 2011-01-29T13:19:07.913 回答
8

我用的是UQ。英国的 K 让我想到了 K,因为它用于 PK 和 FK。好吧,无论如何,在我想到英国之后;具有讽刺意味的是,当英国提出这么多其他协会时,这应该是 UNIQUE 的前缀 =)

于 2011-01-29T10:56:21.900 回答