Säg att {Author, Title, Edition}
identifierar en bok unikt, då gäller följande:
-
Det är en supernyckel -- identifierar unikt en tuppel (rad).
-
Det går inte att reducera – att ta bort någon av kolumnerna gör det inte längre till en nyckel.
-
Det är en kandidatnyckel -- en irreducerbar supernyckel är en kandidatnyckel.
Låt oss nu överväga ID (heltal)
Jag kan resonera att Book
tabellnyckel kommer att dyka upp i några andra tabeller som en främmande nyckel och även i några få index. Så det kommer att ta ganska lite utrymme -- säg tre kolumner x 40 tecken (eller vad som helst...) -- i var och en av dessa tabeller plus i matchande index.
För att göra dessa "andra" tabeller och index mindre kan jag lägga till en unik heltalskolumn i Book
tabell som ska användas som en nyckel som kommer att refereras till som en främmande nyckel. Säg något i stil med:
alter table Book add BookID integer not null identity;
Med BookID
är (måste vara) unik också, Book
Tabellen har nu två kandidatnycklar.
Nu kan jag välja BookID
som en primärnyckel.
alter table Book add constraint pk_Book primary key (BookID);
Men {Author,Title,Edition}
måste förbli en nyckel (unik) för att förebygga något sånt här:
BookID Author Title Edition
-----------------------------------------------
1 C.J.Date Database Design 1
2 C.J.Date Database Design 1
För att sammanfatta det, lägg till BookID
-- och att välja det som primärt -- stoppade inte {Author, Title, Edition}
vara en (kandidat)nyckel. Det måste fortfarande ha sin egen unika begränsning och vanligtvis det matchande indexet.
Observera också att från designpunkten gjordes detta beslut på den "fysiska nivån". I allmänhet, på den logiska nivån av design, detta ID
existerar inte -- det introducerades under övervägande av kolumnstorlekar och index. Så det fysiska schemat härleddes från det logiska. Beroende på DB-storlek, RDBMS och hårdvara som används, kan inget av dessa storleksresonemang ha mätbar effekt -- så använd {Author, Title, Edition}
som en PK kan vara helt bra design -- tills det bevisats annorlunda.