sql >> Base de Datos >  >> RDS >> Sqlserver

Clave única frente a índice único en SQL Server 2008

Una restricción única se implementa en segundo plano como un índice único, por lo que realmente no importa cómo lo especifique. Tiendo a implementarlo simplemente como:

ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);

Algunas personas crean un índice único en su lugar, por ejemplo,

CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);

La diferencia está en la intención:si está creando la restricción para hacer cumplir las reglas de singularidad/negocios, crea una restricción, si lo está haciendo para ayudar al rendimiento de la consulta, podría ser más lógico crear un índice único. Nuevamente, bajo las sábanas es la misma implementación, pero el camino que tome para llegar allí puede ayudar a documentar su intención.

Creo que hay múltiples opciones para adherirse tanto a la funcionalidad anterior de Sybase como al estándar ANSI (aunque las restricciones únicas no se adhieren al estándar al 100%, ya que solo permiten un valor NULL:un índice único, en por otro lado, puede solucionar esto agregando un WHERE cláusula (WHERE col IS NOT NULL ) en SQL Server 2008 y superior).