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:
- Baza podataka mora već ispunjavati zahtjeve i 1NF i 2NF.
- Svi stupci baze podataka moraju ovisiti o primarnom ključu, što znači da se vrijednost bilo koje stupca može izvesti samo iz primarne ključeve.
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:
- EmployeeID
- Ime
- Prezime
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:
- VehicleID
- Proizvođač
- Model
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 modeli stol:
- VehicleID
- Proizvođač
- ModelID
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.
- ModelID
- Proizvođač
- Model
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:
- Broj narudžbe
- Broj kupca
- Jedinična cijena
- Količina
- ukupno
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.