Tredje normalform (3NF) är en databasprincip som stödjer integriteten av data genom att bygga på databasens normaliseringsprinciper som tillhandahålls av First Normal Form (1NF) och Second Normal Form (2NF).
Tredje normala formulärkrav
Det finns två grundläggande krav för att en databas ska vara i tredje normala form:
- Databasen måste redan uppfylla kraven för både 1NF och 2NF.
- Alla databas-kolumner måste bero på den primära nyckeln, vilket betyder att alla kolumnvärden endast kan härledas från den primära nyckeln.
Om den primära nyckeln beroende
Låt oss undersöka ytterligare vad vi menar med det faktum att alla kolumner måste bero på den primära nyckeln.
Om ett kolumnvärde kan härledas från både primärnyckeln och en annan kolumn i tabellen, bryter den mot 3NF. Tänk på en anställdas bord med dessa kolumner:
- Anställnings-ID
- Förnamn
- Efternamn
Både både LastName och FirstName beror bara på värdet av EmployeeID? Tja, kan LastName bero på FirstName? Nej, eftersom inget som är inneboende i LastName skulle föreslå värdet av FirstName. Kan FirstName bero på LastName? Nej, för detsamma är det sant: vad som helst en LastName kan vara, det kunde inte ge en antydan om värdet av Förnamn. Därför är denna tabell 3NF-kompatibel.
Men betrakta detta fordonstabell:
- VehicleID
- Tillverkare
- Modell
Tillverkaren och modellen kan härledas från VehicleID - men modellen kan också härledas från tillverkaren eftersom en fordonsmodell endast tillverkas av en viss tillverkare. Denna bordsdesign är icke-3NF-kompatibel och kan därför resultera i dataanomalier. Till exempel kan du uppdatera tillverkaren utan att uppdatera modellen, introducerar felaktigheter.
För att göra det kompatibelt, skulle vi behöva flytta den extra beroende kolumnen till en annan tabell och referera den med en främmande nyckel. Detta skulle resultera i två tabeller:
Fordonsbord
I tabellen nedan är ModelID en utländsk nyckel till modeller tabell:
- VehicleID
- Tillverkare
- ModelID
Modeller Tabell
Denna nya tabell kartlägger modeller till tillverkare. Om du vill uppdatera information om fordon som är specifik för en modell, skulle du göra det i den här tabellen, snarare än i fordonstabellen.
- ModelID
- Tillverkare
- Modell
Avledade fält i 3NF-modellen
En tabell kan innehålla ett härledt fält - ett som beräknas baserat på andra kolumner i tabellen. Tänk på att du tänk på denna tabell med widgetorder:
- Ordernummer
- Kundnummer
- Enhetspris
- Kvantitet
- Total
Totalet bryter 3NF-överensstämmelse eftersom det kan härledas genom att multiplicera enhetens pris med kvantiteten, i stället för att vara helt beroende av den primära nyckeln. Vi måste ta bort det från bordet för att följa den tredje normala formuläret.
Faktum är att det är bättre att inte lagra det i databasen alls, eftersom det här är härledt.
Vi kan helt enkelt beräkna det "på flugan" när vi utför databasfrågor. Vi kan till exempel ha tidigare använt den här frågan för att hämta ordernummer och totalsummor:
VÄLJ Beställningsnummer, Totalt FRÅN WidgetOrders
Vi kan nu använda följande fråga:
SELECT OrderNumber, UnitPrice * Antal AS Totalt FRÅN WidgetOrders
för att uppnå samma resultat utan att bryta mot normaliseringsreglerna.