命名约定为唯一约束

命名约定很重要,主键和外键通常使用明显的约定(分别为PK_TableFK_Table_ReferencedTable )。 索引的IX_Table_Column命名也是相当标准的。

那么UNIQUE约束呢? 这个约束是否有一个通用的命名约定? 我见过UK_TableName_ColumnUQ_TableName_Column和有人推荐AX_TableName_Column – 我不知道这是从哪里来的。

我通常使用UQ但我并不特别喜欢它,而且我也不喜欢为保卫我对UK代言人的select。

我只想看看是否对最stream行的命名达成共识,或者说为什么比其他的更有意义。

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

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

一个例子是关键是“ThingID”,一个替代关键字 ThingName的替代关键字。 你仍然需要约束 ThingName:它不会被用作关键。

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

你可以使用唯一的索引来代替“IXU”。 根据所采用的逻辑,索引也是唯一的关键。 否则,这是一个索引。 那么我们就从IK_columnname开始, IK_columnname唯一索引开始IK_columnname 。 奇妙。

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

编辑:2013年2月。自SQL Server 2008以来,索引也可以有filter。 限制不能

所以,归结为其中之一

  • 根据其余的使用SQL的星球坚持使用UQ
  • 将IK用于唯一索引(IKC用于集群)以保持一致…

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

  • 首要的关键。 _PK
  • 唯一索引/约束。 _AK {XX}
  • 非唯一索引。 _IX {XX}
  • 检查约束。 _CK {XX}
  • 默认约束。 _DF {XX}
  • 外键约束。 _FK {XX}

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

  • PK:主键
  • AK:备用钥匙
  • FK:外键
  • IX:IndeX
  • CK:ChecK
  • DF:DeFault

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

我使用UQ。 在英国的K使我想到K,因为它用在PK和FK。 那么,在我想起英国之后, 具有讽刺意味的是,当英国提出如此多的其他协会时,这应该是UNIQUE的前缀=)