2011-01-29 4 views
93

Le convenzioni di denominazione sono importanti e la chiave primaria e la chiave esterna sono convenzioni comunemente utilizzate e ovvie (PK_Table e FK_Table_ReferencedTable, rispettivamente). Il naming IX_Table_Column per gli indici è anche abbastanza standard.Convenzione di denominazione per il vincolo univoco

E il vincolo UNIQUE? Esiste una convenzione di denominazione comunemente accettata per questo vincolo? Ho visto UK_TableName_Column, UQ_TableName_Column e qualcuno che consiglia AX_TableName_Column - Non so da dove viene.

In genere ho usato UQ ma non mi piace particolarmente, e non mi piace dover difendere la mia scelta di usarlo contro un avvocato UK.

Vorrei semplicemente vedere se c'è un consenso sulla denominazione più diffusa, o un buon ragionamento sul motivo per cui uno ha più senso degli altri.

+3

Io uso UQ_ ...... –

+1

@Mitch Qualsiasi motivo per cui? Anch'io lo faccio ma mi chiedo sempre perché nessuno usa solo 'U'. A cosa serve "Q"? –

+0

Si potrebbe fare la stessa domanda su IX per IndeX ... perché non solo io? –

risposta

41

Il mio pensiero è che non è una chiave: è un vincolo.

Si potrebbe essere utilizzata come chiave naturalmente, ed unicamente identifica una fila, ma non è la chiave.

Un esempio potrebbe essere che la chiave è "ThingID", una chiave sostitutiva utilizzata al posto di ThingName, la chiave naturale. Hai ancora bisogno di vincolante ThingName: non verrà comunque utilizzato come chiave.

Vorrei utilizzare anche UQ e UQC (se raggruppati).

È possibile utilizzare invece un indice univoco e passare a "IXU". Secondo la logica impiegata, un indice è anche una chiave ma solo quando è unico. Altrimenti è un indice. Quindi, inizieremo con IK_columnname per indici univoci e IX_columnname per indici non univoci. Meravigliosa.

E l'unica differenza tra un vincolo univoco e un indice univoco sono le colonne INCLUDE.

Modifica: Feb 2013. Da SQL Server 2008, anche gli indici possono avere filtri. I vincoli non possono

Quindi, si tratta di uno dei

  • bastone con UQ come per il resto della SQL-utilizzando pianeta
  • uso IK per indici univoci (IKC per cluster troppo) per essere coerente ...
+1

Preferiresti fortemente "IXU" su "UIX"? –

+1

Vedere https://blogs.msdn.microsoft.com/dtjones/2009/10/29/best-practice-naming-constraints/ –

6

Io uso UQ. La K nel Regno Unito mi fa pensare a K come è usato in PK e FK. Bene, dopo che penso comunque al Regno Unito; ironico che questo dovrebbe essere un prefisso per UNIQUE quando il Regno Unito fa apparire così tante altre associazioni =)

89

mio convenzione di denominazione per gli indici e vincoli:

  • chiave primaria. _PK
  • Indice/vincolo univoco. _AK {xx}
  • Indice non univoco. _IX {xx}
  • Controllare il vincolo._CK {xx}
  • Vincolo predefinito. _DF {xx}
  • Vincolo chiave esterna. _FK {xx}

Dove {xx} è un numero di sequenza di 2 cifre, a partire da 01 per ciascun tipo di vincolo per tabella. La chiave primaria non ottiene un numero di sequenza poiché può esserne solo uno. I 2-char significati suffisso alpha sono:

  • PK: Chiave primaria
  • AK: Alternate chiave
  • FK: Foreign Key
  • IX: Indice
  • CK: VEDI
  • DF: DeFault

Generalmente voglio raggruppare i dati del catalogo di metadati/sistema dall'oggetto di controllo piuttosto che da obj tipo ect.

+5

AK: la chiave alternativa è ciò che gli strumenti di dati di SQL Server chiamano anche la superficie di progettazione del 2012. –

+7

@AlexKeySmith: ** Grazie ** per aver spiegato perché Microsoft usa AK per questo !! –

+0

Nessun problema @TJCrowder :-) –