Stavljanje baze podataka u treću normalnu formu (3NF)

Treća normalna forma (3NF) je princip baze podataka koji podržava integritet podataka izgradnjom na principima normalizacije baze podataka koji su obezbeđeni u prvom normalnom obliku (1NF) i drugom normalnom obliku (2NF).

Treći zahtjevi za normalnu obradu

Postoje dva osnovna zahteva da baza podataka bude u trećoj normalnoj formi:

O zavisnosti od primarnog ključa

Hajde da istražimo dalje šta podrazumevamo činjenicom da sve kolone moraju zavisiti od primarnog ključa.

Ako vrednost kolone može biti izvedena iz primarnog ključa i drugog stupca u tabeli, ona krši 3NF. Razmotrite tablu zaposlenih sa ovim stupcima:

Da li i LastName i FirstName zavise samo od vrednosti EmployeeID-a? Pa, da li LastName zavisi od FirstName? Ne, jer ništa inherentno u LastName ne bi predložilo vrijednost FirstName. Može li FirstName zavisiti od LastName? Ne ponovo, jer je isto istina: bez obzira na LastName, ne bi mogla dati nagoveštaj vrijednosti FirstName-a. Zbog toga je ova tabela usklađena sa 3NF.

Ali uzmite u obzir ovu tablu Vozila:

ProizvoĎač i model mogu proizvesti iz VehicleID-a, ali model može proizvesti i proizvođača, jer model vozila kreira samo određeni proizvođač. Ovaj dizajn tabele nije kompatibilan sa 3NF-om, i stoga može rezultirati anomalijama podataka. Na primer, možete ažurirati proizvođača bez ažuriranja modela, uvodeći netačnosti.

Da bismo ga usaglasili, trebali bi premjestiti dodatnu zavisnu kolonu na drugu tablicu i pozvati ga pomoću inostranog ključa. To bi dovelo do dve tabele:

Vozni stol

U donjoj tabeli ModelID je inostrani ključ u tabeli " Modeli" :

Tablica modela

Ova nova tabela mapira modele za proizvođače. Ako želite da ažurirate sve informacije o vozilu specifične za model, to biste uradili u ovoj tabeli, a ne u tablici Vozila.

Izvedena polja u modelu 3NF

Tabela može sadržati izvedeno polje - jedno koje se izračunava na osnovu drugih kolona u tabeli. Na primer, razmotrite ovu tabelu naredbi za vidžet:

Ukupno prekida saglasnost sa 3NF-om jer može da se izvede množenjem cene jedinice za količinu, umjesto da je potpuno zavisna od primarnog ključa. Moramo ga ukloniti sa stola kako bi se pridržavali treće normalne forme.

U stvari, pošto je izvedeno, bolje je da ga uopšte ne čuvate u bazi podataka.

Jednostavno ga možemo izračunati "na putu" prilikom obavljanja upita za bazu podataka. Na primer, možda smo ranije koristili ovaj upit za preuzimanje brojeva i ukupnih brojeva naloga:

SELECT OrderNumber, Total FROM WidgetOrders

Sada možemo da koristimo sledeći upit:

SELECT OrderNumber, UnitPrice * Količina AS Ukupno od WidgetOrders

da postignu iste rezultate bez kršenja pravila normalizacije.