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

那么唯一的约束呢?这个约束是否有一个普遍接受的命名约定?我见过UK_TableName_ColumnUQ_TableName_Column和有人推荐AX_TableName_Column——我不知道这是从哪里来的.

我通常使用UQ,但我并不特别喜欢它,我也不喜欢为自己的 Select 辩护来对抗UK倡导者.

我只是想看看人们对最流行的命名是否有共识,或者一个很好的理由来解释为什么一个命名比其他命名更有意义.

推荐答案

我的 idea 是,这不是一个关键:它是一个约束.

它当然可以用作键,并且唯一地标识一行,但它isn't是键.

例如,密钥是"ThingID",这是一个替代物key,用来代替自然密钥ThingName.你仍然需要constrain ThingName:但它不会被用作密钥.

我也会使用UQ和UQC(如果集群的话).

你可以使用一个唯一的索引来代替"IXU".根据所采用的逻辑,索引也是键,但只有在唯一时才是键.否则它就是一个索引.然后我们从IK_columnname开始,唯一索引是IK_columnname,非唯一索引是IX_columnname.非凡的

唯一约束和唯一索引之间的唯一区别是包含列.

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

所以,它归结为一个

  • 按照SQL使用planet的其余部分,坚持使用UQ
  • 将IK用于唯一索引(IKC也用于聚集索引)以保持一致...

Sql相关问答推荐

使用子查询和连接更新PostgreSQL

如何将多个 Select 查询从一个表中组合出来

更新在两个或多个面中具有交点的面

如何根据同一表中某一列中的值重新排列行(仅输出它们)(重新排序)?

删除事务中的本地临时表

收到%1、%2或%2邮箱的唯一客户

从字符串中删除";1、";和";2,";,而不删除";11、";和";12、";

对列进行排序后,基于两列删除重复行

嵌套Json对象的SQL UPDATE WHERE

在UNION查询中查找MIN

如何为缺少的类别添加行

PostgreSQL:查找继承表中的特定记录属于哪个表

如何用HeidiSQL在Firebird中设置超时?

如何将insert语句重复n次使一个值递增?

SQL仅返回第一个字母在A-Z之间的值

用替代方案替换 SQL Cursor 以提高性能

Postgresql 生成器列导致语法错误

Clickhouse:左连接表到外部数组

在SQL中实现表格数据透视类型报表

使用 regexp_replace 替换所有出现的特殊字符