sql sql-server naming-conventions unique-constraint

sql - Convención de nomenclatura para restricción única



sql-server naming-conventions (3)

Las convenciones de nomenclatura son importantes, y la clave principal y la clave externa tienen convenciones comunes y obvias ( PK_Table y FK_Table_ReferencedTable , respectivamente). La nomenclatura de IX_Table_Column para índices también es bastante estándar.

¿Qué pasa con la restricción ÚNICA? ¿Hay una convención de nomenclatura comúnmente aceptada para esta restricción? He visto UK_TableName_Column , UQ_TableName_Column , y alguien recomendando AX_TableName_Column - No sé de dónde viene eso.

Normalmente he usado la UQ pero no me gusta particularmente, y no me gusta tener que defender mi elección de utilizarla contra un defensor del UK .

Simplemente me gustaría ver si hay un consenso sobre la denominación más prevalente, o un buen razonamiento sobre por qué uno tiene más sentido que los demás.


Mi convención de nomenclatura para índices y restricciones:

  • Clave primaria. _PK
  • Índice / restricción único. _AK {xx}
  • Índice no único. _IX {xx}
  • Verifica la restricción. _CK {xx}
  • Restricción predeterminada _DF {xx}
  • Restricción de clave foránea _FK {xx}

Donde {xx} es un número de secuencia de 2 dígitos, comenzando en 01 para cada tipo de restricción por tabla. La clave principal no obtiene un número de secuencia ya que solo puede haber una. Los significados del sufijo alfa de 2 caracteres son:

  • PK: clave principal
  • AK: clave alternativa
  • FK: clave externa
  • IX: IndeX
  • CK: ChecK
  • DF: DeFault

Por lo general, quiero agrupar los datos de metadatos / catálogos de sistemas por el objeto de control en lugar de por tipo de objeto.


Mi pensamiento es que no es una clave: es una restricción.

Podría ser utilizado como una clave, por supuesto, e identifica de forma única una fila, pero no es la clave.

Un ejemplo sería que la clave es "ThingID", una clave sustituta utilizada en lugar de ThingName la clave natural. Aún necesita restringir ThingName: aunque no se usará como clave.

También usaría UQ y UQC (si está en clúster).

Puede usar un índice único en su lugar y buscar "IXU". Por la lógica empleada, un índice también es clave, pero solo cuando es único. De lo contrario, es un índice. Entonces comenzamos con IK_columnname para índices únicos y IX_columnname para índices no únicos. Maravilloso.

Y la única diferencia entre una restricción única y un índice único es INCLUDE columnas.

Edición: febrero de 2013. Desde SQL Server 2008, los índices también pueden tener filtros. Las restricciones no pueden

Entonces, se trata de uno de

  • seguir con UQ según el resto del planeta que usa SQL
  • use IK para índices únicos (IKC para agruparse también) para ser consistente ...

Yo uso UQ. La K en el Reino Unido me hace pensar en K ya que se usa en PK y FK. Bueno, después de todo pienso en el Reino Unido; Es irónico que este debería ser un prefijo para ÚNICO cuando el Reino Unido menciona tantas otras asociaciones =)