Skip to main content

Slik konverterer du en database til tredje normal form (3NF)

Third Normal Form (3NF) | Database Normalization | DBMS (Kan 2024)

Third Normal Form (3NF) | Database Normalization | DBMS (Kan 2024)
Anonim

Tredje normal form (3NF) er et databaseprinsipp som støtter integriteten av data ved å bygge på databasen normaliseringsprinsipper som er gitt av First Normal Form (1NF) og Second Normal Form (2NF).

Tredje normal formkrav

Det er to grunnleggende krav for at en database skal være i tredje vanlig form:

  • Databasen må allerede oppfylle kravene til både 1NF og 2NF.
  • Alle databasekolonner må avhenge av primærnøkkelen, noe som betyr at en hvilken som helst kolonnens verdi kun kan hentes fra primærnøkkelen.

Om primærnøkkelavhengigheten

La oss utforske videre hva vi mener med det faktum at alle kolonnene må avhenge av primærnøkkelen.

Hvis en kolonnens verdi kan avledes fra både primærnøkkelen og en annen kolonne i tabellen, bryter den 3NF. Vurder en tabell med ansatte med disse kolonnene:

  • Ansatt ID
  • Fornavn
  • Etternavn

Bør både LastName og FirstName bare avhenge av verdien av EmployeeID? Vel, kan LastName avhenge av FirstName? Nei, fordi ingenting som er inneholdt i LastName, vil foreslå verdien av FirstName. Kunne FirstName avhenge av LastName? Ikke igjen, fordi det samme er sant: Uansett hva en LastName kan være, kan det ikke gi et hint om verdien av FirstName. Derfor er denne tabellen 3NF-kompatibel.

Men vurder dette kjøretøybordet:

  • VehicleID
  • Produsent
  • Modell

Produsenten og modellen kan utlede fra VehicleID - men modellen kan også komme fra produsenten fordi en kjøretøymodell kun er laget av en bestemt produsent. Denne borddesignen er ikke-3NF-kompatibel, og kan derfor resultere i data-anomalier. For eksempel kan du oppdatere produsenten uten å oppdatere modellen, introdusere unøyaktigheter.

For å gjøre det kompatibelt, trenger vi å flytte tilleggsavhengig kolonne til en annen tabell og referere den til en utenlandsk nøkkel. Dette ville resultere i to tabeller:

Kjøretøy Tabell

I tabellen nedenfor er ModelID en fremmednøkkel til modeller bord:

  • VehicleID
  • Produsent
  • ModelID

Modeller Tabell

Denne nye tabellen kartlegger modeller for produsenter. Hvis du vil oppdatere kjøretøyinformasjon som er spesifikk for en modell, ville du gjøre det i dette bordet, i stedet for i bilens bord.

  • ModelID
  • Produsent
  • Modell

Avledede felt i 3NF-modellen

Et bord kan inneholde et avledet felt - en som beregnes basert på andre kolonner i tabellen. For eksempel, vurder denne tabellen med widgetordrer:

  • Ordrenummer
  • Kundenummer
  • Enhetspris
  • Mengde
  • Total

Totalt brytes 3NF-overholdelse fordi det kan utledes ved å multiplisere enhedsprisen med mengden, i stedet for å være fullt avhengig av primærnøkkelen. Vi må fjerne den fra bordet for å overholde den tredje vanlige formen.

Faktisk, siden det er avledet, er det bedre å ikke lagre det i databasen i det hele tatt.

Vi kan bare beregne det "på farten" når vi utfører databasespørsmål. For eksempel har vi tidligere brukt denne søket for å hente bestillingsnumre og totalsummer:

VELG Bestillingsnummer, Totalt FRA WidgetOrders

Vi kan nå bruke følgende spørring:

SELECT OrderNumber, UnitPrice * Antall AS Totalt FROM WidgetOrders

for å oppnå de samme resultatene uten å bryte normaliseringsregler.