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

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

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

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

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


person Kirk Broadhurst    schedule 29.01.2011    source источник
comment
@ Митч Есть причина, почему? Я тоже, но всегда спрашиваю себя, почему никто не использует просто U. Что означает Q?   -  person Kirk Broadhurst    schedule 29.01.2011
comment
Вы можете задать тот же вопрос о IX для IndeX ... почему не только я?   -  person Chris J    schedule 29.01.2011
comment
UQ - это просто сокращение от UNIQUE. Причина появления двух букв в основном в том, что это установленный прецедент PK.   -  person Mark Cidade    schedule 29.01.2011
comment
Лично я закончил тем, что использовал UX_ * для Unique indeX, в знак уважения к IX по умолчанию для IndeX. Мне особенно не нравится UK_, потому что я из Великобритании. Меня можно было бы убедить в AK, если бы это понравилось в Интернете.   -  person Tim Abell    schedule 23.05.2016
comment
@KirkBroadhurst Я никогда не видел такой конвенции, но из-за голосов, она должна быть обычным явлением и хорошо служить цели. Но иметь внешний ключ с именем FK_03 не очень полезно, не лучше ли назвать его FK_TargetTable_SourceTable? Не могли бы вы уточнить.   -  person CodingYoshi    schedule 17.07.2017


Ответы (3)


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

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

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

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

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

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

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

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

  • придерживаться UQ в соответствии с остальной частью планеты, использующей SQL
  • используйте IK для уникальных индексов (IKC для кластеризованных тоже), чтобы быть согласованными ...
person gbn    schedule 29.01.2011
comment
Вы бы сильно предпочли IXU UIX? - person Hamish Grubijan; 27.02.2013
comment
См. blogs.msdn.microsoft.com/ dtjones / 2009/10/29 / - person Stefan Steiger; 14.10.2016

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

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

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

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

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

person Nicholas Carey    schedule 29.01.2011
comment
AK: Альтернативный ключ - это то, что также называет их поверхность проектирования инструментов данных SQL Server 2012. - person Alex KeySmith; 22.08.2013
comment
@AlexKeySmith: Спасибо за объяснение, почему Microsoft использует для этого AK !! - person T.J. Crowder; 23.08.2015
comment
Нет проблем @ T.J. Crowder :-) - person Alex KeySmith; 24.08.2015
comment
@TJCrowder, в мире моделирования отношений сущностей / баз данных, это альтернативный ключ, потому что, как и первичный ключ, набор столбцов, содержащий альтернативный ключ, должен быть уникальным, таким образом обеспечивая [альтернативный] идентичность строки / кортежа. - person Nicholas Carey; 24.08.2015
comment
@NicholasCarey: Нет, я понял - как только я увидел комментарий Алекса, загорелся свет. :-) - person T.J. Crowder; 24.08.2015
comment
Я опаздываю на вечеринку, но я всегда делаю разницу между уникальными индексами и уникальными ограничениями, это две разные вещи. Они могут появиться одновременно. - person The Impaler; 27.06.2018
comment
@TheImpaler: в SQL Server (тема под рукой) уникальное ограничение создает уникальный индекс. Вот как SQL Server применяет ограничение. - person Nicholas Carey; 28.06.2018
comment
@NicholasCarey Я думаю, это почти везде. Однако у вас может быть другой случай, когда вы создаете уникальный индекс без создания уникального ограничения. - person The Impaler; 28.06.2018
comment
Да, но тот факт, что он уникален, делает его ключом: ключ представляет собой набор атрибутов для таблицы, так что таблица уникальна для этого набора атрибутов: то есть нет двух строк в таблица имеет те же значения для этого набора атрибутов. Однако, строго говоря, и если вы хотите быть педантичным, такой набор атрибутов не является ключом, если он сам содержит правильное подмножество атрибутов, которое аналогичным образом определяет уникальность (например, набор атрибутов, составляющих ключ, может: t содержат посторонние атрибуты, не способствующие уникальности.) - person Nicholas Carey; 02.07.2018

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

person bitxwise    schedule 29.01.2011