web-dev-qa-db-fra.com

Convention de dénomination pour contrainte unique

Les conventions de dénomination sont importantes, et la clé primaire et la clé étrangère ont couramment utilisé des conventions évidentes (PK_Table et FK_Table_ReferencedTable, respectivement). Le IX_Table_Column _ nommer les index est également assez standard.

Qu'en est-il de la contrainte UNIQUE? Existe-t-il une convention de nommage communément acceptée pour cette contrainte? J'ai vu UK_TableName_Column, UQ_TableName_Column, et quelqu'un recommandant AX_TableName_Column - Je ne sais pas d'où ça vient.

J'ai généralement utilisé UQ mais je ne l'aime pas particulièrement et je n'aime pas avoir à défendre mon choix de l'utiliser contre un avocat UK.

J'aimerais simplement voir s'il existe un consensus sur la dénomination la plus répandue, ou un bon raisonnement pour expliquer pourquoi l'une est plus logique que les autres.

114
Kirk Broadhurst

Ma pensée est que ce n'est pas une clé: c'est une contrainte.

Il pourrait être utilisé comme clé, bien sûr, et identifie de manière unique une ligne, mais il n'est pas la clé.

Un exemple serait que la clé est "ThingID", un substitut clé utilisé à la place de ThingName, la clé naturelle. Vous devez toujours contraindre ThingName: il ne sera cependant pas utilisé comme clé.

Je voudrais aussi utiliser UQ et UQC (si en cluster).

Vous pouvez utiliser un index unique à la place et opter pour "IXU". Selon la logique utilisée, un index est également une clé, mais uniquement lorsqu'il est unique. Sinon c'est un index. Nous commencerions donc par IK_columnname pour les index uniques et IX_columnname pour les index non uniques. Merveilleux.

Et la seule différence entre une contrainte unique et un index unique réside dans les colonnes INCLUDE.

Edit: Feb 2013. Depuis SQL Server 2008, les index peuvent aussi avoir des filtres. Les contraintes ne peuvent pas

Donc, cela revient à l’un des

  • s'en tenir à UQ comme dans le reste de la planète utilisant SQL
  • utilisez IK pour les index uniques (IKC pour les clusters également)) pour être cohérent ...
50
gbn

Ma convention de nommage pour les index et les contraintes:

  • Clé primaire. _PK
  • Indice unique/contrainte. _AK {xx}
  • Index non unique. _IX {xx}
  • Vérifiez la contrainte. _CK {xx}
  • Contrainte par défaut. _DF {xx}
  • Contrainte de clé étrangère. _FK {xx}

Où {xx} est un numéro de séquence à 2 chiffres, commençant à 01 pour chaque type de contrainte par table. La clé primaire ne reçoit pas de numéro de séquence car il ne peut y en avoir qu'un. Les significations du suffixe alpha à 2 caractères sont les suivantes:

  • PK: clé primaire
  • AK: clé alternative
  • FK: clé étrangère
  • IX: IndeX
  • CK: ChecK
  • DF: DeFault

Je souhaite généralement regrouper les données de catalogue de métadonnées/système par objet de contrôle plutôt que par type d'objet.

116
Nicholas Carey

J'utilise UQ. Le K au Royaume-Uni me fait penser au K tel qu'il est utilisé dans PK et FK. Eh bien, je pense quand même au Royaume-Uni; il est ironique que cela soit un préfixe pour UNIQUE quand le Royaume-Uni soulève tant d’autres associations =)

5
bitxwise