Hopp til innhold
Fagartikkel

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.

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 en 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 felter 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 personID, 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 felter 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 felter 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 unikt 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 fins 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, f.eks. venneID.