En unik begrænsning er implementeret bag kulisserne som et unikt indeks, så det er lige meget, hvordan du angiver det. Jeg har en tendens til at implementere det simpelthen som:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
Nogle mennesker opretter i stedet et unikt indeks, f.eks.
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
Forskellen ligger i hensigten - hvis du opretter begrænsningen for at håndhæve unikke/forretningsregler, opretter du en begrænsning, hvis du gør det for at hjælpe forespørgselsydelsen, kan det være mere logisk at oprette et unikt indeks. Igen, under dynen er det den samme implementering, men vejen du tager for at komme dertil kan hjælpe med at dokumentere din hensigt.
Jeg tror, der er flere muligheder for at overholde både tidligere Sybase-funktionalitet såvel som at overholde ANSI-standarden (selvom unikke begrænsninger ikke overholder standarden 100 %, da de kun tillader én NULL-værdi - et unikt indeks, på på den anden side kan du omgå dette ved at tilføje en WHERE
klausul (WHERE col IS NOT NULL
) på SQL Server 2008 og nyere).