En unik begränsning implementeras bakom kulisserna som ett unikt index, så det spelar ingen roll hur du anger det. Jag tenderar att implementera det helt enkelt som:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
Vissa människor skapar ett unikt index istället, t.ex.
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
Skillnaden ligger i avsikten - om du skapar begränsningen för att upprätthålla unika/affärsregler skapar du en begränsning, om du gör det för att hjälpa frågeprestanda kan det vara mer logiskt att skapa ett unikt index. Återigen, under täcket är det samma implementering, men vägen du tar dit kan hjälpa till att dokumentera din avsikt.
Jag tror att det finns flera alternativ för att följa både tidigare Sybase-funktionalitet och att följa ANSI-standarden (även om unika begränsningar inte följer standarden till 100 %, eftersom de bara tillåter ett NULL-värde - ett unikt index, på å andra sidan kan du lösa detta genom att lägga till en WHERE
sats (WHERE col IS NOT NULL
) på SQL Server 2008 och senare).