Jedinečné omezení je implementováno za scénou jako jedinečný index, takže nezáleží na tom, jak jej určíte. Mám tendenci to implementovat jednoduše jako:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
Někteří lidé místo toho vytvoří jedinečný index, např.
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
Rozdíl je v záměru – pokud vytváříte omezení k vynucení pravidel jedinečnosti/obchodních pravidel, vytvoříte omezení, pokud to děláte kvůli výkonu dotazu, může být logičtější vytvořit jedinečný index. Opět pod přikrývkou jde o stejnou implementaci, ale cesta, kterou se tam dostanete, může pomoci zdokumentovat váš záměr.
Myslím, že existuje několik možností, jak dodržet jak předchozí funkcionalitu Sybase, tak i standard ANSI (i když jedinečná omezení nedodržují standard na 100 %, protože umožňují pouze jednu hodnotu NULL – jedinečný index, na na druhou stranu to lze obejít přidáním WHERE
klauzule (WHERE col IS NOT NULL
) na SQL Server 2008 a vyšší).