唯一约束的命名约定

时间:2011-01-29 10:39:42

标签: sql sql-server naming-conventions unique-constraint

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

UNIQUE约束怎么样?这个约束是否有一个普遍接受的命名约定?我看过UK_TableName_ColumnUQ_TableName_Column,有人推荐AX_TableName_Column - 我不知道它来自哪里。

我通常使用UQ,但我并不特别喜欢它,我不喜欢捍卫我对UK倡导者使用它的选择。

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

3 个答案:

答案 0 :(得分:112)

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

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

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

  • PK:主键
  • AK:Alternate Key
  • FK:外键
  • IX:IndeX
  • CK:ChecK
  • DF:DeFault

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

答案 1 :(得分:47)

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

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

一个例子是密钥是“ThingID”,代理密钥代替ThingName使用自然密钥。你仍然需要约束 ThingName:它不会被用作键。

我还使用UQ和UQC(如果是群集的)。

您可以使用唯一索引代替“IXU”。根据所采用的逻辑,索引也是一个关键,但只有在唯一的时候。否则它是一个索引。因此,对于唯一索引,我们将从IK_columnname开始,对于非唯一索引,我们将从IX_columnname开始。非凡。

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

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

所以,它归结为

之一
  • 根据使用SQL的其余星球
  • 坚持使用UQ
  • 将IK用于唯一索引(群集的IKC也是一致的)......

答案 2 :(得分:5)

我使用UQ。英国的K让我想起K在PK和FK中的使用。好吧,在我想到英国之后呢?具有讽刺意味的是,当英国提出这么多其他协会时,这应该是UNIQUE的前缀=)