2011-01-29 138 views
93

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

UNIQUE约束呢?这个约束是否有一个通用的命名约定?我见过UK_TableName_Column,UQ_TableName_Column,有人推荐AX_TableName_Column - 我不知道从哪里来。

我通常使用UQ但我并不特别喜欢它,我不喜欢必须捍卫我对使用它的支持者的支持。

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

+3

我使用UQ_ ...... – 2011-01-29 10:41:31

+1

@Mitch任何理由?我也是,但我总是问自己为什么没有人只用'U'。 “Q”代表什么? – 2011-01-29 10:56:48

+0

你可以问关于IX的同一个问题IndeX ...为什么不只是我? – 2011-01-29 12:19:51

回答

41

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

可以作为课程的一个关键,而唯一标识一行,但它不是关键。

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

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

您可以使用唯一的索引来代替“IXU”。根据所采用的逻辑,索引也是一个关键,但只有在唯一时。否则它是一个索引。那么我们将从IK_columnname开始,为非唯一索引开始,IX_columnname开始。奇妙。

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

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

所以,归结为

  • 棒与UQ为每SQL-使用行星
  • 使用IK为唯一索引(IKC为集群太)的其余部分一个是对于指数和约束条件一致...
6

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

89

我的命名约定:

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

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

  • PK:主键
  • AK:备用钥匙
  • FK:外键
  • IX:指数
  • CK:检查
  • DF: DeFault

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