Stavljanje baze podataka u treći normalan obrazac (3NF)

Treći uobičajeni oblik (3NF) je princip baze podataka koji podržava integritet podataka izgrađujući na načelima normalizacije baze podataka koje pružaju Prvi normalni obrazac (1NF) i drugi normalan obrazac (2NF).

Treći normirani uvjeti za oblik

Postoje dva osnovna zahtjeva da baza podataka bude u trećem normalnom obliku:

O ovisnosti o primarnoj ključnosti

Nastavimo dalje istražiti što mislimo pod činjenicom da svi stupci moraju ovisiti o primarnom ključu.

Ako se vrijednost stupca može izvesti iz primarnog ključa i drugog stupca u tablici, krši 3NF. Razmotrite tablicu zaposlenika s ovim stupcima:

Imaju li i ime i prezime posljedice samo o vrijednosti EmployeeID-a? Može li LastName ovisi o FirstNameu? Ne, jer ništa prirođeno ime LastName ne bi predlagalo vrijednost FirstName. Može li FirstName ovisiti o LastName? Ne, jer isto vrijedi: bez obzira na LastName, nije mogao dati nagovještaj vrijednosti FirstName. Dakle, ova tablica je usklađena s 3NF.

Ali razmotrite ovu tablicu Vozila:

Proizvođač i model mogu proizaći iz ID-a vozila - ali Model bi također mogao proizaći iz proizvođača jer model vozila izrađuje samo određeni proizvođač. Ovaj dizajn tablice nije usklađen sa standardom 3NF, pa bi stoga mogao rezultirati anomalijama podataka. Na primjer, možete ažurirati proizvođača bez ažuriranja modela, uvodeći netočnosti.

Kako bismo ga postigli usklađeni, trebali bismo premjestiti dodatnu ovisnu stupac na drugu tablicu i uputiti ga pomoću stranog ključa. To bi rezultiralo u dvije tablice:

Tablica vozila

U donjoj tablici ModelID je strani ključ za tablicu Model :

Tablica modela

Ova nova tablica prikazuje modele proizvođača. Ako želite ažurirati podatke o vozilu specifičan za model, to biste učinili u ovoj tablici, a ne u tablici Vozila.

Izvedena polja u modelu 3NF

Tablica može sadržavati izvedeno polje - onaj koji se izračunava na temelju drugih stupaca u tablici. Na primjer, razmotrite ovu tablicu widgeta:

Ukupna vrijednost prekida 3NF sukladnost jer se može izvesti množenjem jedinične cijene za količinu, umjesto da bude u potpunosti ovisna o primarnom ključu. Moramo ga ukloniti sa stola kako bismo se pridržavali trećeg normalnog obrasca.

Zapravo, budući da je izveden, bolje je da ga uopće ne pohranjujete u bazu podataka.

Jednostavno ga možemo izračunati "u letu" prilikom obavljanja upita baze podataka. Na primjer, možda smo prethodno upotrebljavali taj upit za preuzimanje brojeva narudžbi i ukupnih iznosa:

ODABERI redni broj, ukupno FROM WidgetOrders

Sada možemo koristiti sljedeći upit:

ODABERI redni broj, jedinicaCjena * Količina AS Ukupno OD WidgetOrders

postići iste rezultate bez kršenja pravila normalizacije.