sql >> Databasteknik >  >> RDS >> Sqlserver

Unik nyckel kontra unikt index på SQL Server 2008

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).



  1. Hur jämför man två listor och slår ihop dem i Python/MySQL?

  2. Finns det något sätt att skicka en anpassad typ från C# till Oracle med System.Data.OracleClient?

  3. Hur tar jag reda på om en oracle-databas är inställd på autocommit?

  4. Mysql - Arkivering av data, vilken lösning ska jag använda?