Konwencja nazewnictwa dla unikalnego ograniczenia

129

Konwencje nazewnictwa są ważne, a klucz podstawowy i klucz obcy są powszechnie stosowane konwencje i oczywiste ( PK_Tablei FK_Table_ReferencedTable, odpowiednio). IX_Table_ColumnNazewnictwa dla indeksów jest dość standardowe.

A co z unikalnym ograniczeniem? Czy istnieje powszechnie przyjęta konwencja nazewnictwa dla tego ograniczenia? Widziałem UK_TableName_Column, UQ_TableName_Columni ktoś polecający AX_TableName_Column- nie wiem, skąd to się bierze.

Zwykle używałem, UQale niezbyt mi się to podoba i nie lubię bronić swojego wyboru przed UKadwokatem.

Chciałbym po prostu sprawdzić, czy istnieje konsensus co do najbardziej rozpowszechnionego nazewnictwa lub dobre uzasadnienie, dlaczego jedno ma więcej sensu niż inne.

Kirk Broadhurst
źródło
1
@Mitch Jakiś powód, dlaczego? Ja też, ale zawsze zadaję sobie pytanie, dlaczego nikt po prostu nie używa U. Po co to Qoznacza?
Kirk Broadhurst,
1
Możesz zadać to samo pytanie o IX dla IndeX ... dlaczego nie tylko ja?
Chris J
3
„UQ” to tylko skrót od „UNIQUE”. Powód dwóch liter jest w zasadzie taki, że poprzedzony jest przez „PK”.
Mark Cidade,
2
Osobiście skończyłem na użyciu UX_ * dla „Unique indeX”, w hołdzie dla domyślnego IX dla „IndeX”. Szczególnie nie lubię UK_, ponieważ pochodzę z Wielkiej Brytanii. Mógłbym się przekonać na AK, jeśli tak lubi internet.
Tim Abell
@KirkBroadhurst Nigdy nie widziałem takiej konwencji, ale ze względu na upvotes musi być powszechna i dobrze służyć. Ale posiadanie klucza obcego o nazwie FK_03 nie jest zbyt pomocne, czy nie byłoby lepiej go nazwać FK_TargetTable_SourceTable? Czy możesz to rozwinąć.
KodowanieYoshi

Odpowiedzi:

56

Uważam, że to nie jest klucz: to ograniczenie.

To mógł być używany jako klucz oczywiście i jednoznacznie identyfikuje wiersz, ale to nie jest najważniejsze.

Przykładem może być to, że klucz to „ThingID”, zastępczy klucz używany zamiast ThingName, klucza naturalnego. Nadal musisz ograniczyć ThingName: nie będzie on jednak używany jako klucz.

Używałbym również UQ i UQC (jeśli są zgrupowane).

Zamiast tego możesz użyć unikalnego indeksu i wybrać „IXU”. Zgodnie z przyjętą logiką indeks jest również kluczem, ale tylko wtedy, gdy jest unikalny. W przeciwnym razie jest to indeks. Więc zaczniemy od IK_columnnameindeksów unikatowych i IX_columnnamenieunikalnych. Cudowny.

Jedyną różnicą między unikalnym ograniczeniem a unikalnym indeksem są kolumny INCLUDE.

Edycja: luty 2013. Od SQL Server 2008 indeksy mogą mieć również filtry. Ograniczenia nie mogą

Tak więc sprowadza się to do jednego z

  • trzymaj się UQ, jak na pozostałej planecie używającej SQL
  • użyj IK dla unikalnych indeksów (IKC również dla klastrów), aby były spójne ...
gbn
źródło
1
Czy wolałbyś zdecydowanie „IXU” od „UIX”?
Hamish Grubijan
133

Moja konwencja nazewnictwa dla indeksów i ograniczeń:

  • Klucz podstawowy. _PK
  • Unikalny indeks / ograniczenie. _AK {xx}
  • Nieunikalny indeks. _IX {xx}
  • Sprawdź ograniczenie. _CK {xx}
  • Domyślne ograniczenie. _DF {xx}
  • Ograniczenie klucza obcego. _FK {xx}

Gdzie {xx} to 2-cyfrowy numer kolejny, zaczynający się od 01 dla każdego typu ograniczenia w tabeli. Klucz podstawowy nie otrzymuje numeru sekwencji, ponieważ może być tylko jeden. Znaczenie 2-znakowego przyrostka alfa to:

  • PK: klucz podstawowy
  • AK: Alternate Key
  • FK: klucz obcy
  • IX: IndeX
  • CK: ChecK
  • DF: DeFault

Generalnie chcę grupować metadane / dane katalogu systemowego według obiektu kontrolnego, a nie według typu obiektu.

Nicholas Carey
źródło
10
AK: Klucz alternatywny jest tym, co powierzchnia projektowa narzędzi SQL Server Data Tools 2012 nazywa je również.
Alex KeySmith
15
@AlexKeySmith: Dziękuję za wyjaśnienie, dlaczego firma Microsoft używa do tego AK !!
TJ Crowder
Żaden problem @TJCrowder :-)
Alex KeySmith
@TJCrowder, w świecie modelowania relacji jednostek / bazy danych, jest to klucz alternatywny , ponieważ podobnie jak klucz podstawowy zestaw kolumn zawierający klucz alternatywny musi być unikalny, zapewniając w ten sposób [alternatywną] tożsamość dla wiersza / krotki.
Nicholas Carey
@NicholasCarey: Nie, rozumiem - jak tylko zobaczyłem komentarz Alexa, zapaliło się światło. :-)
TJ Crowder
5

Używam UQ. K w Wielkiej Brytanii kojarzy mi się z K tak, jak jest używane w PK i FK. Cóż, po tym jak myślę o Wielkiej Brytanii; ironiczne, że powinien to być przedrostek dla UNIQUE, gdy Wielka Brytania wywołuje tak wiele innych skojarzeń =)

bitxwise
źródło