Een unieke beperking wordt achter de schermen geïmplementeerd als een unieke index, dus het maakt niet echt uit hoe u deze specificeert. Ik heb de neiging om het eenvoudig te implementeren als:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
Sommige mensen maken in plaats daarvan een unieke index, bijvoorbeeld
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
Het verschil zit hem in de bedoeling:als u de beperking creëert om uniciteit/bedrijfsregels af te dwingen, maakt u een beperking. Als u dit doet om de queryprestaties te ondersteunen, is het misschien logischer om een unieke index te maken. Nogmaals, onder de dekens is het dezelfde implementatie, maar de weg die je neemt om daar te komen, kan helpen om je intentie te documenteren.
Ik denk dat er meerdere opties zijn om te voldoen aan zowel eerdere Sybase-functionaliteit als om te voldoen aan de ANSI-standaard (hoewel unieke beperkingen niet 100% voldoen aan de standaard, omdat ze slechts één NULL-waarde toestaan - een unieke index, op aan de andere kant kun je dit omzeilen door een WHERE
. toe te voegen clausule (WHERE col IS NOT NULL
) op SQL Server 2008 en hoger).