Unikalne ograniczenie jest implementowane za kulisami jako unikalny indeks, więc tak naprawdę nie ma znaczenia, jak je określisz. Zwykle implementuję to po prostu jako:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
Niektórzy ludzie zamiast tego tworzą unikalny indeks, np.
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
Różnica jest w intencji - jeśli tworzysz ograniczenie w celu wymuszenia unikalności/reguł biznesowych, tworzysz ograniczenie, jeśli robisz to w celu zwiększenia wydajności zapytań, bardziej logiczne może być utworzenie unikalnego indeksu. Ponownie, pod osłonami jest to ta sama implementacja, ale droga, którą podążasz, może pomóc w udokumentowaniu Twoich zamiarów.
Myślę, że istnieje wiele opcji przestrzegania zarówno poprzedniej funkcjonalności Sybase, jak i standardu ANSI (nawet jeśli unikalne ograniczenia nie są zgodne ze standardem w 100%, ponieważ dopuszczają tylko jedną wartość NULL — unikalny indeks, w z drugiej strony można to obejść, dodając WHERE
klauzula (WHERE col IS NOT NULL
) na SQL Server 2008 i nowszych).