Соглашение об именах для уникальных ограничений - PullRequest
112 голосов
/ 29 января 2011

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

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

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

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

Ответы [ 3 ]

113 голосов
/ 29 января 2011

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

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

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

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

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

49 голосов
/ 29 января 2011

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

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

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

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

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

И единственное различие между уникальным ограничением и уникальным индексом - ВКЛЮЧИТЬ столбцы.

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

Итак, все сводится к одной из

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

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

...