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

129

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

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

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

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

Кирк Бродхерст
источник
1
@ Митч Есть причина, почему? Я тоже, но всегда спрашиваю себя, почему никто просто не использует U. Что за Qподставка?
Кирк Бродхерст
1
Вы можете задать тот же вопрос о IX для IndeX ... почему не только я?
Chris J
3
«UQ» - это просто сокращение от «UNIQUE». Причина появления двух букв в основном в том, что это прецедент, установленный «PK».
Марк Сидаде
2
Лично я закончил тем, что использовал UX_ * для "Unique indeX", в знак уважения к IX по умолчанию для "IndeX". Мне особенно не нравится UK_, потому что я из Великобритании. Меня можно было бы убедить в AK, если это то, что нравится в Интернете.
Тим Абелл
@KirkBroadhurst Я никогда не видел такой конвенции, но из-за голосов, она должна быть обычным явлением и хорошо служить цели. Но наличие внешнего ключа с именем FK_03 не очень помогает, не лучше ли назвать его FK_TargetTable_SourceTable? Не могли бы вы уточнить.
CodingYoshi

Ответы:

56

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

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

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

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

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

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

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

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

  • придерживаться UQ в соответствии с остальной частью планеты, использующей SQL
  • используйте IK для уникальных индексов (IKC для кластеризованных тоже), чтобы быть согласованными ...
ГБН
источник
1
Вы бы предпочли "IXU" вместо "UIX"?
Хэмиш Грубиджан,
2
См. Blogs.msdn.microsoft.com/dtjones/2009/10/29/…
Стефан Штайгер,
133

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

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

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

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

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

Николас Кэри
источник
10
AK: Альтернативный ключ - это то, что также называет их поверхность проектирования инструментов данных SQL Server 2012.
Alex KeySmith
15
@AlexKeySmith: Спасибо, что объяснили, почему Microsoft использует для этого AK !!
TJ Crowder
Нет проблем @TJCrowder :-)
Alex KeySmith
@TJCrowder, в мире моделирования отношений сущностей / баз данных, это альтернативный ключ, потому что, как и первичный ключ, набор столбцов, содержащий альтернативный ключ, должен быть уникальным, таким образом обеспечивая [альтернативный] идентификатор для строки / кортежа.
Николас Кэри
@NicholasCarey: Нет, я понял - как только я увидел комментарий Алекса, загорелся свет. :-)
TJ Crowder
5

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

bitxwise
источник