Соглашение об именах для уникального ограничения

Соглашения об именах важны, а первичный ключ и внешний ключ обычно используются и очевидны (PK_Table и FK_Table_ReferencedTable, соответственно). Именование индексов IX_Table_Column также довольно стандартно.

Как насчет ограничения UNIQUE? Существует ли общепринятое соглашение об именах для этого ограничения? Я видел UK_TableName_Column, UQ_TableName_Column, и кто-то рекомендую AX_TableName_Column - я не знаю, откуда это взялось.

Я обычно использовал UQ, но мне это особенно не нравится, и мне не нравится защищать свой выбор от использования его против сторонника UK.

Я просто хотел бы узнать, существует ли консенсус в отношении наиболее распространенного наименования, или хорошая аргументация относительно того, почему человек имеет больше смысла, чем другие.

Ответ 1

Я думаю, что это не ключ: это ограничение.

Он может быть использован как ключ, конечно, и однозначно идентифицирует строку, но это не ключ.

Примером может служить то, что ключ является "ThingID", суррогатным ключом, используемым вместо ThingName, естественным ключом. Вам все равно необходимо ограничить ThingName: он не будет использоваться в качестве ключа, хотя.

Я бы также использовал UQ и UQC (если они были сгруппированы).

Вместо этого вы можете использовать уникальный индекс и перейти на "IXU". По используемой логике индекс также является ключом, но только когда он уникален. В противном случае это индекс. Итак, мы начинаем с IK_columnname для уникальных индексов и IX_columnname для неидеальных индексов. Замечательное.

И единственное различие между уникальным ограничением и уникальным индексом - это INCLUDE столбцы.

Изменить: февраль 2013 г. Начиная с SQL Server 2008, индексы также могут иметь фильтры. Ограничения не могут

Итак, это сводится к одному из

  • придерживаться UQ в соответствии с остальной частью платформы, использующей SQL
  • использовать IK для уникальных индексов (IKC для кластеризации тоже), чтобы быть последовательным...

Ответ 2

Соглашение об именах для индексов и ограничений:

  • Основной ключ. _PK
  • Уникальный индекс/ограничение. _AK {хх}
  • Неспецифический индекс. _IX {хх}
  • Проверить ограничение. _CK {хх}
  • Ограничение по умолчанию. _DF {хх}
  • Ограничение внешнего ключа. _FK {хх}

Где {xx} - 2-значный порядковый номер, начиная с 01 для каждого типа ограничения для каждой таблицы. Первичный ключ не получает порядковый номер, так как может быть только один. Значения суффикса 2- char alpha:

  • PK: основной ключ
  • AK: Альтернативный ключ
  • FK: внешний ключ
  • IX: IndeX
  • CK: ChecK
  • DF: DeFault

Я вообще хочу группировать данные метаданных/системного каталога с помощью объекта управления, а не по типу объекта.

Ответ 3

Я использую UQ. K в Великобритании заставляет меня думать о K, как он используется в ПК и FK. Хорошо, когда я думаю о Соединенном Королевстве в любом случае; иронично, что это должно быть префиксом для UNIQUE, когда Великобритания вызывает так много других ассоциаций =)