Primærnøklar

Primærnøkkel, kandidatnøkkel og surrogatnøkkel
Alle tabellar må ha ein primærnøkkel, og det er ved hjelp av primærnøkkelen at ein skil mellom dei ulike objekta i ein tabell. Med objekt meiner vi all informasjon som tilhøyrer ei linje i tabellen, til dømes ein person i ein persontabell eller ein bil i ein biltabell. Viss to objekt i ein tabell har same primærnøkkel, vil den nyaste av dei to objekta erstatte det andre objektet. Det er derfor viktig å velje eit felt som alltid vil vere unikt.
I nokre tilfelle vil det vere eitt eller fleire av felta som skil seg ut som ein god primærnøkkel. Alle felt som kan passe som primærnøkkel, kallar vi kandidatnøklar, og det er du som lagar databasen, som avgjer kva felt som passar best.
I mange tilfelle er det vanleg å lage eit nytt felt, ein ID, som skal fungere som primærnøkkel, sjølv om ein har fleire aktuelle kandidatnøklar. Ein slik konstruert ID kallar vi ein surrogatnøkkel. Til dømes vil personnummer verke som eit godt alternativ om du skal lage ein persontabell, men på grunn av personvern vil ein unngå lagring av personnummer i stor skala. Derfor vel ein i staden å lage ein eigen person-ID, til dømes eit kundenummer, som er eit tal som berre har noko å seie inne i databasen, men som likevel unikt identifiserer ein person.
Det går òg an å bruke ein kombinasjon av fleire felt som primærnøkkel. Det vil du sjå at kjem til nytte når du skal lage mange-til-mange-relasjonar.

For å oppgi primærnøkkel i MySQL Workbench klikkar du på sjekkboksen PK som høyrer til det feltet du vil setje som primærnøkkel. Sjekkboksen NN vil òg hakast av automatisk. Det betyr at det er forbode å la dette feltet stå tomt når ein skal legge inn data i databasen. Det første feltet du legg inn i ein ny tabell, vil automatisk setjast til å vere primærnøkkel.
Sjå på denne tabellen:
Mine venner
fornamn
etternamn
adresse
postnummer
Instagram-brukarnamn
Snapchat-brukarnamn
Kva felt skil seg ut som kandidatnøklar blant desse attributta?
Kan du lage ein kombinert primærnøkkel av fleire av desse felta?
Ville du brukt ein av dei eksisterande kandidatnøklane som primærnøkkel?