Skip to main content

Sette en database i første normal form

Normalformer och normalisering, del 1 (av 2) (Kan 2024)

Normalformer och normalisering, del 1 (av 2) (Kan 2024)
Anonim

Første Normal Form (1NF) angir grunnleggende regler for en organisert database:

  • Eliminer duplikativ kolonner fra samme tabell.
  • Opprett separate tabeller for hver gruppe relaterte data og identifiser hver rad med en unik kolonne (primærnøkkelen).

Hva betyr disse reglene når man vurderer den praktiske utformingen av en database? Det er faktisk ganske enkelt.

Eliminere duplisering

Den første regelen dikterer at vi ikke må duplisere data innenfor samme rad i et bord. Innenfor databasegruppen, refereres dette konseptet til et bords atomitet. Tabeller som overholder denne regelen sies å være atomiske. La oss undersøke dette prinsippet med et klassisk eksempel: et bord i en human ressurs database som lagrer det underordnede forholdet mellom leder og leder. Med hensyn til vårt eksempel vil vi pålegge forretningsregelen at hver leder kan ha en eller flere underordnede, mens hver underordnet kan ha bare én leder.

Intuitivt, når du oppretter en liste eller et regneark for å spore denne informasjonen, kan vi lage et bord med følgende felt:

  • sjef
  • Subordinate1
  • Subordinate2
  • Subordinate3
  • Subordinate4

Husk imidlertid den første regelen som er pålagt av 1NF: Eliminer duplikatkolonner fra samme tabell. Det er klart at kolonnene underordnet1-underordnet4 er duplikative. Ta et øyeblikk og tenk på problemene som oppstår i dette scenariet. Hvis en leder bare har en underordnet, er kolonnen Subordinate2-Subordinate4 ganske enkelt bortkastet lagringsplass (en verdifull databasevare). Videre kan du tenke på hvor en leder allerede har 4 underordnede - hva skjer hvis hun tar på seg en annen ansatt? Hele bordstrukturen vil kreve endring.

På dette tidspunktet oppstår en annen lys ide vanligvis for databasenes nybegynnere: Vi vil ikke ha mer enn en kolonne, og vi vil tillate en fleksibel mengde datalagring. La oss prøve noe sånt:

  • sjef
  • underordnede

Og underordnet-feltet vil inneholde flere oppføringer i skjemaet "Mary, Bill, Joe."

Denne løsningen er nærmere, men det faller heller ikke under merket. Underordnet kolonne er fortsatt duplikativ og ikke-atomisk. Hva skjer når vi må legge til eller fjerne en underordnet? Vi må lese og skrive hele innholdet i tabellen. Det er ikke en stor sak i denne situasjonen, men hva om en leder hadde hundre ansatte? Det kompliserer også prosessen med å velge data fra databasen i fremtidige spørringer.

Her er et bord som tilfredsstiller den første regelen av 1NF:

  • sjef
  • Underordnet

I dette tilfellet har hver underordnet en enkelt oppføring, men ledere kan ha flere oppføringer.

Identifiser primærnøkkelen

Nå, hva med den andre regelen: identifiser hver rad med en unik kolonne eller sett med kolonner (primærnøkkelen). Du kan ta en titt på tabellen over og foreslå bruken av underordnet kolonne som en primærnøkkel. Faktisk er underordnet kolonne en god kandidat til en primærnøkkel på grunn av at våre forretningsregler angav at hver underordnet kan ha bare én leder. Dataene som vi har valgt å lagre i vårt bord, gjør dette til en mindre enn ideell løsning. Hva skjer hvis vi ansetter en annen ansatt som heter Jim? Hvordan lagrer vi hans manager-underordnede forhold i databasen?

Det er best å bruke en virkelig unik identifikator (for eksempel en ansatt ID) som en primærnøkkel. Vårt finalebord vil se slik ut:

  • Manager ID
  • Underordnet ID

Nå er vårt bord i første normale form! Utover dette er det muligheter for å sette databasen i Second Normal Form samt Tredje Normal Form hvis du er spent på enda mer organisasjon.