Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Chiave univoca e indice univoco in SQL Server 2008

Un vincolo univoco viene implementato dietro le quinte come un indice univoco, quindi non importa come lo specifichi. Tendo a implementarlo semplicemente come:

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

Alcune persone creano invece un indice univoco, ad esempio

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

La differenza sta nell'intento:se si crea il vincolo per imporre regole di unicità/business, si crea un vincolo, se lo si fa per favorire le prestazioni della query, potrebbe essere più logico creare un indice univoco. Anche in questo caso, sotto le coperte c'è la stessa implementazione, ma la strada che prendi per arrivarci potrebbe aiutarti a documentare il tuo intento.

Penso che ci siano più opzioni per aderire sia alla precedente funzionalità Sybase sia per aderire allo standard ANSI (anche se i vincoli univoci non aderiscono allo standard 100%, poiché consentono solo un valore NULL:un indice univoco, su d'altra parte, può aggirare questo problema aggiungendo un WHERE clausola (WHERE col IS NOT NULL ) su SQL Server 2008 e versioni successive).