I relationell DBMS är en unik nyckel en potentiell nyckel (termen möjlig nyckel används också i ryska källor [1] ), vilket inte är den primära nyckeln för en relation. Alla kandidatnycklar för en relation kan unikt identifiera posterna för relationen, men endast en av dem används som primärnyckel för relationen [1] . De återstående kandidatnycklarna kallas unika nycklar eftersom de unikt kan identifiera en post i en relation. Unika nycklar kan ha flera kolumner. Unika nycklar kallas också alternativa nycklar. Unika nycklar är ett alternativ till den primära nyckeln i en relation. Vanligtvis har unika nycklar en UNIK begränsning.
Nycklar i ett relationellt DBMS är ett sätt att ge tillgång till data i tabeller. En nyckel är ett enstaka relationsattribut eller en sammanlänkning av flera attribut. När man specificerar databasstrukturen i ett relationellt DBMS kan ytterligare restriktioner (restriktioner) läggas på nyckeln, som kontrolleras vid varje försök att skriva till databasen och fungerar som ett sätt att säkerställa integriteten hos data i databasen. En sådan begränsning som ofta används när man bygger en databas är den unika begränsningen. Förekomsten av denna begränsning på ett visst attribut (databaspostfält) eller deras sammanlänkning säkerställer att en databastabell inte kommer att stöta på mer än en post med något speciellt fältvärde eller fältsammansättning. En nyckel med en sådan begränsning kallas unik. Det kan finnas godtyckligt många unika nycklar i samma databastabell, som var och en kan användas för att unikt identifiera en post i tabellen. Men bara en av dem sticker ut som primär .
I den enklaste definitionen är "en nyckel en unik identifierare" [2] , så en unik nyckel är en pleonasm . Nycklar som finns i det ursprungliga objektet är unika i det objektet. Nycklar som överförs till en annan enhet kan vara unika eller inte, beroende på designen och hur de används i den andra tabellen. Främmande nycklar kan vara primärnycklar i en annan tabell; till exempel kan PersonID bli EmployeeID i Employee-tabellen. I det här fallet är EmployeeID både en främmande nyckel och en unik primärnyckel, vilket innebär att tabellerna har ett förhållande 1:1. I det fall en personenhet innehåller en biologisk faderidentifierare förväntas faderidentifieraren inte vara unik, eftersom en far kan ha mer än ett barn.
I en relationsdatabas identifierar en kandidatnyckel varje rad med datavärden i en databastabell. En kandidatnyckel innehåller en kolumn eller uppsättning kolumner i en databastabell. Inga två separata rader eller dataposter i en databastabell kan ha samma datavärde (eller kombination av datavärden) i de kolumner som är associerade med en kandidatnyckel, eftersom NULL-värden inte används. Beroende på strukturen kan en databastabell ha många kandidatnycklar, men inte mer än en kandidatnyckel kan identifieras som en primärnyckel.
Nyckelbegränsningen gäller uppsättningen av tupler i tabellen vid en given tidpunkt. En nyckel är inte nödvändigtvis en unik identifierare bland alla möjliga instanser av tupler som kan lagras i en tabell, men den innebär en dataintegritetsregel att dubbletter inte ska tillåtas i en databastabell. Några möjliga exempel på nycklar är personnummer, ISBN, fordonsregistreringsnummer eller användarnamn för inloggning.
I princip kan vilken nyckel som helst refereras av främmande nycklar. Vissa SQL DBMS tillåter att en främmande nyckel-begränsning endast anges på en primärnyckel, men de flesta system tillåter att en främmande nyckel-begränsning refererar till vilken tabellnyckel som helst.
Definiera en unik nyckel i SQL-syntax:
ÄNDRA TABELL < tabellidentifierare > LÄGG TILL [ CONSTRAINT < constraint identifier > ] { PRIMÄRNYCKEL | _ UNIQUE } ( < kolumnnamn > [ { , < kolumnnamn > } ... ] ) _ _Dessutom kan nycklar definieras när du skapar en tabell CREATE TABLE.
CREATE TABLE tabellnamn ( id_col INT , col2 CHARACTER VARYING ( 20 ), key_col SMALLINT NOT NULL , ... CONSTRAINT key_unique UNIQUE ( key_col ), ... ) SKAPA TABELL tabellnamn ( id_col INT PRIMARY KEY , col2 CHARACTER VARIING ( 20 ), ... key_col SMALLINT NOT NULL UNIQUE , ... )Primärnyckeln är inte nullbar (den kan inte definieras för kolumner som tillåter ett sådant värde). Varje tabell kan inte ha mer än en primärnyckel [3] . I vissa DBMS skapar standardprimärnyckeln ett klustrat index. I praktiska SQL-implementeringar kanske vissa tabeller inte har en primärnyckel [1] .
Unika nyckelegenskaperEn unik begränsning kan ställas in på kolumner som tillåter null-värden, i vilket fall rader som innehåller null-värden kanske inte är unika i den uppsättning kolumner som definieras av begränsningen.
Varje tabell kan ha flera unika nycklar [3] . I vissa DBMS skapar den unika standardbegränsningen ett icke-klustrat index.
Observera att, till skillnad från en PRIMARY KEY-begränsning, betyder en UNIK begränsning inte INTE NULL för kolumnerna som är involverade i begränsningen. Om du inte vill tillåta null-värdet måste du ange NOT NULL-begränsningen. Du kan ställa in UNIKA begränsningar på nollbara kolumner, men SQL-standarden säger att begränsningen inte garanterar unikheten hos nollbara kolumner (unikhet gäller inte rader där någon av kolumnerna innehåller ett nullvärde).
Enligt SQL-standarden [4] ger en unik begränsning inte unikhet i närvaro av NULL-värden och kan därför innehålla flera rader med identiska kombinationer av null- och icke-nullvärden - dock implementerar inte alla DBMS denna funktion i enlighet med SQL-standarden [4] med SQL-standarden [5] [6] .