Hopp til innhold
Bokmål
Fagstoff

Primærnøkler

En primærnøkkel er ett felt i en tabell som kan brukes som en unik identifikator for et objekt i tabellen. Det vil si at ved hjelp av primærnøkkelen kan vi for eksempel identifisere en enkelt person i en persontabell eller en enkelt bil i en biltabell.

Primærnøkkel, kandidatnøkkel og surrogatnøkkel

Alle tabeller må ha en primærnøkkel, og det er ved hjelp av primærnøkkelen at man skiller mellom de ulike objektene i en tabell. Med objekt mener vi all informasjon som tilhører ei linje i tabellen, for eksempel en person i en persontabell eller en bil i en biltabell. Hvis to objekter i en tabell har samme primærnøkkel, vil den nyeste av de to objektene erstatte det andre objektet. Det er derfor viktig å velge et felt som alltid vil være unikt.

I noen tilfeller vil det være ett eller flere av feltene som skiller seg ut som en god primærnøkkel. Alle felt som kan passe som primærnøkkel, kalles kandidatnøkler, og det er du som lager databasen, som avgjør hvilket felt som passer best.

I mange tilfeller er det vanlig å lage et nytt felt, en ID, som skal fungere som primærnøkkel, selv om man har flere aktuelle kandidatnøkler. En slik konstruert ID kalles en surrogatnøkkel. For eksempel vil personnummer virke som et godt alternativ hvis du skal lage en persontabell, men på grunn av personvern vil man unngå lagring av personnummer i stor skala. Derfor velger man i stedet å lage en egen person-ID, for eksempel et kundenummer, som er et tall som kun har betydning inne i databasen, men som likevel unikt identifiserer en person.

Det går også an å bruke en kombinasjon av flere felt som primærnøkkel. Det vil du se at kommer til nytte når du skal lage mange-til-mange-relasjoner.

For å angi primærnøkkel i MySQL Workbench klikker du på sjekkboksen PK som hører til det feltet du vil sette som primærnøkkel. Sjekkboksen NN vil også hakes av automatisk. Det betyr at det er ikke tillatt å la dette feltet stå tomt når man skal legge inn data i databasen. Det første feltet du legger inn i en ny tabell, vil automatisk settes til å være primærnøkkel.

Se på denne tabellen:

Mine venner

  • fornavn

  • etternavn

  • adresse

  • postnummer

  • Instagram-brukernavn

  • Snapchat-brukernavn

Hvilke felt skiller seg ut som kandidatnøkler blant disse attributtene?

Svar

Både Instagram-brukernavn og Snapchat-brukernavn vil være unike for en person.

Kan du lage en kombinert primærnøkkel av flere av disse feltene?

Svar

Kombinasjonen fornavn og adresse kan være unik for en person, men merk deg at dette fungerer bare hvis alle i tabellen bor i et avgrenset område, siden det kan være enkelte gatenavn som finnes flere steder i landet. I så fall kan fornavn, adresse og postnummer fungere, men en primærnøkkel som er satt sammen av tre eller flere attributter kan være upraktisk.

Ville du brukt en av de eksisterende kandidatnøklene som primærnøkkel?

Svar

Instagram-brukernavn og Snapchat-brukernavn kan brukes, men da må man kreve at alle som legges inn har Instagram- eller Snapchat-konto. Det er også en ulempe at disse brukernavnene kan endres. Det enkleste vil være å lage en surrogatnøkkel som gjelder kun i databasen, for eksempel venne-ID.

Skrevet av Karl Arne Dalsaune.
Sist oppdatert 18.08.2020