Namenskonvention für eindeutige Einschränkung

129

Namenskonventionen sind wichtig, und der Primärschlüssel und Fremdschlüssel haben häufig verwendet und offensichtliche Konventionen ( PK_Tableund FK_Table_ReferencedTablesind). Die IX_Table_ColumnBenennung für Indizes ist ebenfalls ziemlich Standard.

Was ist mit der EINZIGARTIGEN Einschränkung? Gibt es eine allgemein akzeptierte Namenskonvention für diese Einschränkung? Ich habe gesehen UK_TableName_Column, UQ_TableName_Columnund jemand zu empfehlen AX_TableName_Column- ich weiß nicht , woher das kommt.

Ich habe es normalerweise benutzt, UQaber ich mag es nicht besonders, und es macht mir keinen Spaß, meine Entscheidung, es zu benutzen, gegen einen UKAnwalt verteidigen zu müssen .

Ich würde einfach gerne sehen, ob es einen Konsens über die am weitesten verbreitete Benennung gibt oder eine gute Begründung dafür, warum eine sinnvoller ist als die anderen.

Kirk Broadhurst
quelle
1
@Mitch Irgendein Grund warum? Ich auch, aber ich frage mich immer, warum niemand nur verwendet U. Wofür steht der QStand?
Kirk Broadhurst
1
Sie könnten die gleiche Frage zu IX für IndeX stellen ... warum nicht nur ich?
Chris J
3
"UQ" ist nur eine Abkürzung für "UNIQUE". Der Grund für zwei Buchstaben ist im Grunde ein Präzedenzfall von "PK".
Mark Cidade
2
Persönlich habe ich UX_ * für "Unique indeX" verwendet, als Hommage an die Standardeinstellung von IX für "IndeX". Ich mag UK_ besonders nicht, weil ich aus Großbritannien komme. Ich könnte mich von AK überzeugen lassen, wenn es das Internet mag.
Tim Abell
@KirkBroadhurst Ich habe noch nie eine solche Konvention gesehen, aber wegen der positiven Stimmen muss sie üblich sein und den Zweck gut erfüllen. Ein Fremdschlüssel namens FK_03 ist jedoch nicht sehr hilfreich. Wäre es nicht besser, ihn zu benennen FK_TargetTable_SourceTable? Können Sie bitte näher darauf eingehen?
CodingYoshi

Antworten:

56

Meiner Meinung nach ist es kein Schlüssel, sondern eine Einschränkung.

Es könnte natürlich als Schlüssel verwendet werden und identifiziert eine Zeile eindeutig, aber es ist nicht der Schlüssel.

Ein Beispiel wäre, dass der Schlüssel „ThingID“ ist, ein Ersatzschlüssel anstelle von ThingName der natürliche Schlüssel verwendet. Sie müssen noch beschränken ThingName: Es wird nicht jedoch als Schlüssel verwendet werden.

Ich würde auch UQ und UQC verwenden (wenn gruppiert).

Sie können stattdessen einen eindeutigen Index verwenden und "IXU" wählen. Nach der verwendeten Logik ist ein Index auch ein Schlüssel, jedoch nur dann, wenn er eindeutig ist. Ansonsten ist es ein Index. Dann beginnen wir mit IK_columnnameeindeutigen Indizes und IX_columnnamenicht eindeutigen Indizes. Wunderbar.

Der einzige Unterschied zwischen einer eindeutigen Einschränkung und einem eindeutigen Index besteht in INCLUDE-Spalten.

Bearbeiten: Februar 2013. Seit SQL Server 2008 können Indizes auch Filter haben. Einschränkungen können nicht

Es kommt also auf eines von

  • Halten Sie sich an UQ gemäß dem Rest des SQL-verwendenden Planeten
  • Verwenden Sie IK für eindeutige Indizes (IKC auch für Clustered), um konsistent zu sein ...
gbn
quelle
1
Würden Sie "IXU" gegenüber "UIX" stark bevorzugen?
Hamish Grubijan
133

Meine Namenskonvention für Indizes und Einschränkungen:

  • Primärschlüssel. _PK
  • Eindeutiger Index / Einschränkung. _AK {xx}
  • Nicht eindeutiger Index. _IX {xx}
  • Überprüfen Sie die Einschränkung. _CK {xx}
  • Standardeinschränkung. _DF {xx}
  • Fremdschlüsseleinschränkung. _FK {xx}

Dabei ist {xx} eine zweistellige Folgenummer, beginnend bei 01 für jeden Einschränkungstyp pro Tabelle. Der Primärschlüssel erhält keine Sequenznummer, da es nur eine geben kann. Die 2-Zeichen-Alpha-Suffix-Bedeutungen sind:

  • PK: Primärschlüssel
  • AK: Alternativer Schlüssel
  • FK: Fremdschlüssel
  • IX: IndeX
  • CK: ChecK
  • DF: Standard

Im Allgemeinen möchte ich Metadaten / Systemkatalogdaten nach dem steuernden Objekt und nicht nach Objekttyp gruppieren.

Nicholas Carey
quelle
10
AK: Alternativer Schlüssel wird von der Entwurfsoberfläche von SQL Server Data Tools 2012 auch so genannt.
Alex KeySmith
15
@AlexKeySmith: Vielen Dank, dass Sie erklärt haben, warum Microsoft AK dafür verwendet !!
TJ Crowder
Kein Problem @TJCrowder :-)
Alex KeySmith
@TJCrowder ist in der Welt der Entitätsbeziehung / Datenbankmodellierung ein alternativer Schlüssel, da der Spaltensatz, der den alternativen Schlüssel enthält, wie der Primärschlüssel eindeutig sein muss, um die [alternative] Identität für die Zeile / das Tupel bereitzustellen.
Nicholas Carey
@NicholasCarey: Nein, ich habe es verstanden - sobald ich Alex 'Kommentar sah, ging das Licht an. :-)
TJ Crowder
5

Ich benutze UQ. Das K in Großbritannien lässt mich an K denken, wie es in PK und FK verwendet wird. Nun, nachdem ich sowieso an Großbritannien gedacht habe; ironisch, dass dies ein Präfix für UNIQUE sein sollte, wenn Großbritannien so viele andere Assoziationen hervorbringt =)

bitxweise
quelle