Skip to main content

Så här konverterar du en databas till tredje normala formuläret (3NF)

Target Haul 2/26 - Hunting Down Clearance & Deals - Pics on the Blog..foodandfashioncents.com (Maj 2024)

Target Haul 2/26 - Hunting Down Clearance & Deals - Pics on the Blog..foodandfashioncents.com (Maj 2024)
Anonim

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.