Конвенція про іменування унікального обмеження


129

Конвенції іменування є важливими, а первинний і зовнішній ключ зазвичай використовують і очевидні конвенції ( PK_Tableі FK_Table_ReferencedTable, відповідно). IX_Table_ColumnПрисвоєння імен індексів також досить стандартні.

А що з єдиним обмеженням? Чи існує загальноприйнята угода про іменування для цього обмеження? Я бачив UK_TableName_Column, UQ_TableName_Columnі хтось рекомендував AX_TableName_Column- я не знаю, звідки це походить.

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

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


1
@Mitch Будь-яка причина, чому? Я теж роблю, але завжди запитую себе, чому ніхто просто не використовує U. Що таке Qпідставка?
Кірк Бродхерст

1
Ви можете задати те саме питання щодо IX для IndeX ... чому б не просто я?
Кріс Дж

3
"UQ" - це лише абревіатура "UNIQUE". Причина двох букв - це, головним чином, прецедент набору "ПК".
Марк Сідаде

2
Особисто я в кінцевому рахунку використовував UX_ * для "Unique indeX", в знак шану за замовчуванням IX для "IndeX". Мені особливо не подобається UK_, оскільки я з Сполученого Королівства. Мене могли б переконати в АК, якщо саме це подобається в Інтернеті.
Тім Абелл

@KirkBroadhurst Я ніколи не бачив такої конвенції, але через нагороди він повинен бути загальним і добре виконувати мету. Але наявність закордонного ключа на ім'я FK_03 не дуже корисно, чи не було б краще його назвати FK_TargetTable_SourceTable? Чи можете ви, будь ласка, докладно.
CodingYoshi

Відповіді:


56

Я думаю, що це не є ключовим: це обмеження.

Звичайно, він може використовуватися як ключ і однозначно ідентифікує рядок, але це не ключ.

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

Я б також використовував UQ та UQC (якщо вони кластеризовані).

Ви можете замість цього використати унікальний індекс і перейти до "IXU". За логікою, що використовується, індекс також є ключовим, але лише тоді, коли він унікальний. Інакше це індекс. Тоді ми б почали з IK_columnnameунікальних індексів та IX_columnnameдля унікальних індексів. Чудовий.

І єдина різниця між унікальним обмеженням та унікальним індексом - це ВКЛЮЧЕННЯ стовпців.

Редагувати: Лютий 2013. Оскільки SQL Server 2008, індекси можуть мати фільтри. Обмежувати не можна

Отже, це зводиться до одного із

  • дотримуйтесь UQ відповідно до решти планети, що використовує SQL
  • використовувати IK для унікальних індексів (IKC для кластерних теж), щоб бути узгодженими ...

1
Ви б сильно віддали перевагу "IXU" над "UIX"?
Гаміш Грубіян


133

Моя конвенція про іменування для індексів та обмежень:

  • Первинний ключ. _PK
  • Унікальний індекс / обмеження. _AK {xx}
  • Неунікальний індекс. _IX {xx}
  • Перевірте обмеження. _CK {xx}
  • Обмеження за замовчуванням. _DF {xx}
  • Зовнішнє ключове обмеження. _FK {xx}

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

  • ПК: Первинний ключ
  • АК: Черговий ключ
  • ФК: Іноземний ключ
  • IX: IndeX
  • CK: ChecK
  • DF: DeFault

Я, як правило, хочу групувати дані метаданих / системного каталогу за керуючим об'єктом, а не за типом об'єкта.


10
AK: Альтернативний ключ - це те, що дизайнерська поверхня SQL Server Data 2012 закликає їх також.
Alex KeySmith

15
@AlexKeySmith: Дякую за пояснення, чому Microsoft використовує АК для цього !!
TJ Crowder

Без проблем @TJCrowder :-)
Алекс Кейсміт

@TJCrowder, у світі моделювання відносин / сутність / база даних, це альтернативний ключ, оскільки, як і первинний ключ, набір стовпців, що містить альтернативний ключ, повинен бути унікальним, таким чином надаючи [альтернативну] ідентичність для рядка / кортежу.
Ніколас Кері

@NicholasCarey: Ні, я зрозумів - як тільки я побачив коментар Алекса, світло загорілося. :-)
TJ Crowder

5

Я використовую UQ. K у Великобританії змушує мене думати про K, як це використовується у ПК та FK. Ну, після того, як я все-таки думаю про Великобританію; іронічно, що це має бути приставкою для УНІКЕЙНОГО, коли Великобританія викликає стільки інших асоціацій =)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.