Convention de dénomination pour la contrainte unique

129

Les conventions de dénomination sont importantes, et la clé primaire et la clé étrangère ont des conventions couramment utilisées et évidentes ( PK_Tableet FK_Table_ReferencedTable, respectivement). La IX_Table_Columndénomination des index est également assez standard.

Qu'en est-il de la contrainte UNIQUE? Existe-t-il une convention de dénomination communément acceptée pour cette contrainte? J'ai vu UK_TableName_Column, UQ_TableName_Columnet quelqu'un recommande AX_TableName_Column- je ne sais pas d'où cela vient.

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

Je voudrais simplement voir s'il existe un consensus sur la dénomination la plus répandue, ou un bon raisonnement pour expliquer pourquoi l'un a plus de sens que les autres.

Kirk Broadhurst
la source
1
@Mitch Une raison pour laquelle? Moi aussi, mais je me demande toujours pourquoi personne n'utilise U. Quel est le Qstand pour?
Kirk Broadhurst le
1
Vous pourriez poser la même question sur IX pour IndeX ... pourquoi pas juste moi?
Chris J
3
«UQ» n'est qu'une abréviation de «UNIQUE». La raison de deux lettres est fondamentalement c'est un précédent établi par "PK".
Mark Cidade
2
Personnellement, j'ai fini par utiliser UX_ * pour "Unique indeX", en hommage à la valeur par défaut de IX pour "IndeX". Je n'aime pas particulièrement UK_ parce que je viens du Royaume-Uni. Je pourrais être persuadé sur AK si c'est ce que l'internet aime.
Tim Abell
@KirkBroadhurst Je n'ai jamais vu une telle convention, mais à cause des votes positifs, elle doit être courante et bien servir le but. Mais avoir une clé étrangère nommée FK_03 n'est pas très utile, ne serait-il pas préférable de la nommer FK_TargetTable_SourceTable? Pouvez-vous s'il vous plaît élaborer.
CodingYoshi

Réponses:

56

Je pense que ce n'est pas une clé: c'est une contrainte.

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

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

J'utiliserais également UQ et UQC (si groupés).

Vous pouvez utiliser un index unique à la place et choisir "IXU". Selon la logique employée, un index est également une clé, mais seulement lorsqu'il est unique. Sinon, c'est un index. Donc, nous commencerions par IK_columnnamepour les index uniques et IX_columnnamepour 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: février 2013. Depuis SQL Server 2008, les index peuvent également avoir des filtres. Les contraintes ne peuvent pas

Donc, cela revient à l'un des

  • s'en tenir à UQ comme pour le reste de la planète utilisant SQL
  • utiliser IK pour les index uniques (IKC pour clustered aussi) pour être cohérent ...
gbn
la source
1
Préférez-vous fortement "IXU" à "UIX"?
Hamish Grubijan le
133

Ma convention de dénomination pour les indices et les contraintes:

  • Clé primaire. _PK
  • Index / contrainte unique. _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 n'obtient 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:

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

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

Nicolas Carey
la source
10
AK: la clé alternative est ce que la surface de conception des outils de données SQL Server 2012 les appelle également.
Alex KeySmith
15
@AlexKeySmith: Merci d' avoir expliqué pourquoi Microsoft utilise AK pour cela !!
TJ Crowder
Pas de problème @TJCrowder :-)
Alex KeySmith
@TJCrowder, dans le monde de la modélisation des relations d'entité / base de données, c'est une clé alternative , car, comme la clé primaire, l'ensemble de colonnes comprenant la clé alternative doit être unique, fournissant ainsi une identité [alternative] pour la ligne / tuple.
Nicholas Carey
@NicholasCarey: Non, je l'ai compris - dès que j'ai vu le commentaire d'Alex, la lumière s'est allumée. :-)
TJ Crowder
5

J'utilise UQ. Le K au Royaume-Uni me fait penser à K tel qu'il est utilisé dans PK et FK. Eh bien, après je pense au Royaume-Uni de toute façon; ironique que cela devrait être un préfixe pour UNIQUE lorsque UK évoque tant d'autres associations =)

bitxwise
la source