Primærnøkler - Konseptutvikling og programmering (IM-IKM vg1) - NDLA

Hopp til innhald
Fagartikkel

Primærnøkler

Ein primærnøkkel er eitt felt i ein tabell som kan brukast som ein unik identifikator for eit objekt i tabellen. Det vil seie at ved hjelp av primærnøkkelen kan vi til dømes identifisere ein enkelt person i ein persontabell eller ein enkelt bil i ein biltabell.

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 blir kalla 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 blir kalla ein surrogatnøkkel. Til dømes vil personnummer verke som eit godt alternativ viss 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 personID, til dømes eit kundenummer, som er eit tal som berre har betydning 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 å angi 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 ikkje tillate å la dette feltet stå tomt når ein skal leggje 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 vener

  • Førenamn
  • Etternamn
  • Adresse
  • Postnummer
  • Instagram-brukarnamn
  • Snapchat-brukarnamn

Kva felt skil seg ut som kandidatnøklar blant desse attributta?

Svar

Både Instagram-brukarnamn og Snapchat-brukarnamn vil vere unike for ein person.

Kan du lage ein kombinert primærnøkkel av fleire av desse felta?

Svar

Kombinasjonen førenamn og adresse kan vere unikt for ein person, men merk deg at dette fungerer berre viss alle i tabellen bur i eit avgrensa område, sidan det kan vere enkelte gatenamn som finst fleire stader i landet. I så fall kan førenamn, adresse og postnummer fungere, men ein primærnøkkel som er sett saman av tre eller fleire attributt kan vere upraktisk.

Ville du brukt ein av dei eksisterande kandidatnøklane som primærnøkkel?

Svar

Instagram-brukarnamn og Snapchat-brukarnamn kan brukast, men då må ein krevje at alle som blir lagt inn har Instagram- eller Snapchat-konto. Det er òg ei ulempe at desse brukarnamna kan endrast. Det enklaste vil vere å lage ein surrogatnøkkel som gjeld berre i databasen, t.d. veneID.

Skrive av Karl Arne Dalsaune.
Sist fagleg oppdatert 18.08.2020