Skip to main content

Sådan konverteres en database til tredje normale form (3NF)

Advance Web Technology :(TYBCA Slip 13) (Kan 2024)

Advance Web Technology :(TYBCA Slip 13) (Kan 2024)
Anonim

Tredje normal form (3NF) er et databaseprincip, der understøtter integriteten af ​​data ved at bygge på databasens normaliseringsprincipper, der leveres af First Normal Form (1NF) og Second Normal Form (2NF).

Tredje normale formkrav

Der er to grundlæggende krav til, at en database skal være i tredje normale form:

  • Databasen skal allerede opfylde kravene til både 1NF og 2NF.
  • Alle databasekolonner skal afhænge af den primære nøgle, hvilket betyder at enhver søjlens værdi kun kan stamme fra den primære nøgle.

Om den primære nøgle afhængighed

Lad os undersøge yderligere, hvad vi mener ved, at alle kolonner skal afhænge af primærnøglen.

Hvis en kolonne værdi kan afledes fra både primærnøglen og en anden kolonne i tabellen, overtræder den 3NF. Overvej en medarbejderbord med disse kolonner:

  • Medarbejder-ID
  • Fornavn
  • Efternavn

Bør både LastName og FirstName kun afhænge af værdien af ​​EmployeeID? Nå, kan LastName afhænge af FirstName? Nej, fordi intet der er iboende i LastName, vil foreslå værdien af ​​FirstName. Kunne FirstName afhænge af LastName? Ikke igen, fordi det samme er sandt: hvad et LastName måske er, det kunne ikke give et tip om værdien af ​​Fornavn. Derfor er denne tabel 3NF-kompatibel.

Men overvej dette køretøjs bord:

  • VehicleID
  • Fabrikant
  • Model

Fabrikanten og modellen kunne hidrøre fra VehicleID - men modellen kunne også hidrøre fra producenten, fordi en køretøjsmodel kun er fremstillet af en bestemt fabrikant. Dette borddesign er ikke-3NF-kompatibelt og kan derfor resultere i dataanomalier. For eksempel kan du opdatere producenten uden at opdatere modellen og indføre unøjagtigheder.

For at gøre det kompatibelt, skal vi flytte den ekstra afhængige kolonne til en anden tabel og referere den ved hjælp af en fremmednøgle. Dette ville resultere i to tabeller:

Køretøjstabel

I nedenstående tabel er ModelID en fremmed nøgle til modeller bord:

  • VehicleID
  • Fabrikant
  • ModelID

Modeller tabel

Denne nye tabel kortlægger modeller til producenter. Hvis du vil opdatere køretøjsoplysninger, der er specifikke for en model, ville du gøre det i denne tabel, snarere end i køretøjets tabel.

  • ModelID
  • Fabrikant
  • Model

Afledte felter i 3NF-modellen

Et bord kan indeholde et afledt felt - et, der beregnes ud fra andre kolonner i tabellen. For eksempel overvej denne tabel med widget ordrer:

  • Ordrenummer
  • Kundenummer
  • Pris per stk
  • Antal
  • i alt

Totalet bryder 3NF overholdelse, fordi det kan udledes ved at multiplicere enhedsprisen med mængden, i stedet for at være fuldt afhængig af den primære nøgle. Vi skal fjerne det fra bordet for at overholde den tredje normale formular.

Faktisk, da det er afledt, er det bedre at ikke gemme det i databasen overhovedet.

Vi kan simpelthen beregne det "på flugt", når der udføres database forespørgsler. For eksempel har vi måske tidligere brugt denne forespørgsel for at hente ordrenumre og totalsummer:

VELG Bestillingsnummer, I alt FRA WidgetOrders

Vi kan nu bruge følgende forespørgsel:

SELECT OrderNumber, UnitPrice * Mængde AS Total FRA WidgetOrders

for at opnå de samme resultater uden at krænke normaliseringsreglerne.