唯一约束的命名约定


129

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

那UNIQUE约束呢?此约束是否有公认的命名约定?我看过UK_TableName_ColumnUQ_TableName_Column和有人推荐AX_TableName_Column-我不知道那是哪里来的。

我通常使用过,UQ但我并不特别喜欢它,而且我不喜欢不得不针对UK倡导者来捍卫自己选择使用它的选择。

我只想看看是否在最普遍的命名上达成共识,或者关于一个人为什么比其他人更有意义的一个很好的理由。


1
@Mitch为什么?我也这样做,但我总是问自己为什么没人用U。代表什么Q
Kirk Broadhurst,

1
您可能会问有关IX for IndeX的相同问题...为什么不只是我?
克里斯J

3
“ UQ”只是“ UNIQUE”的缩写。之所以要输入两个字母,基本上是因为它以“ PK”为先例。
马克·西达德

2
我个人最终为“ Unique indeX”使用UX_ *,以向“ IndeX”的默认IX致敬。我特别不喜欢UK_,因为我来自英国。如果那是互联网喜欢的话,我可能会说服AK。
蒂姆·阿贝尔

@KirkBroadhurst我从未见过这样的约定,但是由于投票的缘故,它必须是常见的并且可以很好地达到目的。但是拥有一个名为FK_03的外键不是很有帮助,将它命名为更好FK_TargetTable_SourceTable吗?您能详细说明一下吗?
CodingYoshi

Answers:


56

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

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

一个例子是,关键是“ThingID”,替代到位ThingName自然键的使用。您仍然需要约束 ThingName:尽管它不会用作键。

我还将使用UQ和UQC(如果已群集)。

您可以改为使用唯一索引,然后使用“ IXU”。根据所采用的逻辑,索引也是关键,但只有在唯一时才是关键。否则,它是一个索引。因此,我们将从IK_columnname唯一索引和IX_columnname非唯一索引开始。奇妙。

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

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

所以,归结为

  • 坚持使用SQL的其余部分中的UQ
  • 使用IK来唯一索引(也将IKC也用于群集索引)来保持一致...

1
与“ UIX”相比,您强烈希望使用“ IXU”吗?
Hamish Grubijan13年


133

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

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

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

  • PK:主键
  • AK:备用键
  • FK:外键
  • IX:IndeX
  • CK:检查
  • DF:DeFault

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


10
AK:备用键也是SQL Server数据工具2012的设计图所称的名称。
Alex KeySmith

15
@AlexKeySmith:感谢您解释为什么Microsoft为此使用AK !!
TJ Crowder 2015年

没问题@TJCrowder :-)
Alex KeySmith

@TJCrowder,在实体关系/数据库建模世界中,它是备用键,因为与主键一样,包含备用键的列集也必须是唯一的,从而为行/元组提供[备用]标识。
Nicholas Carey

@NicholasCarey:不,我明白了。一看到亚历克斯的评论,灯光就亮了。:-)
TJ Crowder

5

我使用UQ。英国的K使我想到了PK和FK中使用的K。好吧,无论如何我还是想到英国。具有讽刺意味的是,当英国建立了许多其他协会时,这应该是UNIQUE的前缀=)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.