Skip to main content

Sette en database i andre normal form (2NF)

JavaScript for Web Apps, by Tomas Reimers and Mike Rizzo (Kan 2024)

JavaScript for Web Apps, by Tomas Reimers and Mike Rizzo (Kan 2024)
Anonim

Vi har sett på flere aspekter ved normalisering av en databasetabell. For det første diskuterte vi de grunnleggende prinsippene for database normalisering. Sist gang, undersøkte vi de grunnleggende kravene som ble fastsatt av den første vanlige formen (1NF). Nå, la oss fortsette vår reise og dekke prinsippene for den andre normale formen (2NF).

De generelle kravene til 2NF

  • Fjern delsett av data som gjelder for flere rader i et bord og legg dem i separate tabeller.
  • Opprett relasjoner mellom disse nye tabellene og deres forgjengere ved bruk av utenlandske nøkler.

Disse reglene kan oppsummeres i en enkel setning: 2NF forsøker å redusere mengden av overflødige data i et bord ved å trekke det ut, plassere det i nye tabeller og opprette relasjoner mellom disse tabellene.

La oss se på et eksempel. Tenk deg en nettbutikk som opprettholder kundeinformasjon i en database. De kan ha et enkelt bord kalt Kunder med følgende elementer:

  • CustNum
  • Fornavn
  • Etternavn
  • Adresse
  • By
  • Stat
  • glidelås

En kort titt på dette bordet viser en liten mengde redundante data. Vi lagrer "Sea Cliff, NY 11579" og "Miami, FL 33157" oppføringer to ganger hver. Nå kan det ikke virke som for mye lagring i vårt enkle eksempel, men forestill deg bortkastet plass hvis vi hadde tusenvis av rader i bordet vårt. I tillegg, hvis postnummeret for Sea Cliff skulle endres, måtte vi gjøre endringen mange steder i hele databasen.

I en 2NF-kompatibel databasestruktur trekkes denne overflødige informasjonen ut og lagres i et eget bord. Vårt nye bord (la oss kalle det ZIPs) kan ha følgende felt:

  • glidelås
  • By
  • Stat

Hvis vi vil være supereffektive, kan vi til og med fylle denne tabellen på forhånd - postkontoret gir en katalog over alle gyldige postnummer og deres by / statlige forhold. Sikkert, du har opplevd en situasjon der denne typen database ble utnyttet. Noen som tar en bestilling, kan ha bedt deg om postnummeret ditt først og så visste byen og staten du ringte fra. Denne typen arrangement reduserer operatørfeil og øker effektiviteten.

Nå som vi har fjernet duplikatdataene fra Kundebordet, har vi nådd den første regelen med andre normale skjemaer. Vi må fortsatt bruke en fremmednøkkel til å knytte de to bordene sammen. Vi bruker postnummeret (primærnøkkelen fra ZIP-tabellen) for å opprette det forholdet. Her er vårt nye Kunderbord:

  • CustNum
  • Fornavn
  • Etternavn
  • Adresse
  • glidelås

Vi har nå minimert mengden redundant informasjon lagret i databasen og strukturen vår er i andre normale form.