120 votes

Convention de dénomination pour contrainte unique

Les conventions de nommage sont importantes, et la clé primaire et de clé étrangère ont couramment utilisé et évident conventions (PK_Table et FK_Table_ReferencedTable, respectivement). L' IX_Table_Column de nommage pour les index est également assez standard.

Que dire de la contrainte UNIQUE? Est-il communément admis convention de nommage pour que cette contrainte? J'ai vu UK_TableName_Column, UQ_TableName_Column, et quelqu'un de recommander AX_TableName_Column - je ne sais pas d'où ça vient.

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

Je voudrais simplement voir si il y a un consensus sur la forme la plus répandue de nommage, ou un bon raisonnement pour expliquer pourquoi on fait plus de sens que les autres.

123voto

Nicholas Carey Points 24614

Ma convention de nommage pour les indices et les contraintes:

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

Où {xx} est un 2 chiffres du numéro de séquence, en commençant à 01 pour chaque type de contrainte par table. Clé primaire n'est pas d'obtenir un numéro de séquence puisqu'il ne peut y avoir qu'un seul. Le 2-char alpha suffixe significations sont les suivantes:

  • PK: Clé Primaire
  • AK: autre Clé
  • FK: Clé Étrangère
  • IX: IndeX
  • CK: Vérifier
  • DF: par Défaut

En général, je veux groupe de métadonnées/système de catalogue de données par l'objet du contrôle de gestion, plutôt que par type d'objet.

53voto

gbn Points 197263

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

Il pourrait être utilisé comme une clé de cours, 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 de la clé utilisée à la place de ThingName la clé naturelle. Vous avez encore besoin de contraindre ThingName: il ne sera pas utilisé comme une clé.

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

Vous pouvez utiliser un index unique à la place et aller pour "IXU". Par la logique employée, un index est également un élément clé, mais seulement lors de l'unique. Sinon c'est un indice. Alors il fallait commencer avec IK_columnname pour les index uniques et IX_columnname pour les non-index uniques. Merveilleux.

Et la seule différence entre une contrainte unique et d'un index unique INCLURE des colonnes.

Edit: En Février 2013. Depuis SQL Server 2008, les index peuvent avoir des filtres de trop. Les contraintes ne peuvent pas

Donc, il s'agit de l'un des

  • bâton avec UQ que par le reste du SQL à l'aide de la planète
  • utilisation IK pour les index uniques (IKC cluster trop) pour être cohérent...

5voto

bitxwise Points 2246

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 =)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X