Соглашение об именах для уникального ограничения
Соглашения об именах важны, а первичный ключ и внешний ключ обычно используются и очевидны (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, когда Великобритания вызывает так много других ассоциаций =)