Tretja normalna oblika (3NF) je načelo baze podatkov, ki podpira celovitost podatkov, tako da gradi načela normalizacije baz podatkov, ki jih zagotavljata prva navadna oblika (1NF) in druga navadna oblika (2NF).
Tretje normalne oblike zahtev
Obstajata dve osnovni zahtevi, da baza podatkov ostane v tretji normalni obliki:
- Baza podatkov mora že izpolnjevati zahteve tako 1NF kot 2NF.
- Vsi stolpci baze podatkov morajo biti odvisni od primarnega ključa, kar pomeni, da je lahko vsaka vrednost stolpca izvedena samo iz primarnega ključa.
O odvisnosti od primarnih ključev
Raziščimo še, kaj mislimo z dejstvom, da morajo biti vsi stolpci odvisni od primarnega ključa.
Če je vrednost stolpca mogoče izpeljati iz primarnega ključa in drugega stolpca v tabeli, krši 3NF. Razmislite o tabeli zaposlenih s temi stolpci:
- Zaposleni ID
- Ime
- Priimek
Ali sta LastName in FirstName odvisna samo od vrednosti EmployeeID? No, ali je LastName odvisno od FirstName? Ne, ker nič v lasti LastName ne bi predlagalo vrednosti FirstName. Ali je lahko FirstName odvisno od LastName? Še enkrat, ker je isto res: ne glede na to, da je LastName, ne bi mogel podati namigov o vrednosti FirstName. Zato je ta tabela skladna s 3NF.
Vendar menite, da je to tabela Vozila:
- VehicleID
- Proizvajalec
- Model
Proizvajalec in model bi lahko izhajali iz vozilaID - vendar bi model lahko izhajal tudi od proizvajalca, ker model vozila izdeluje le določen proizvajalec. Ta zasnova tabele je skladna z ne-3NF, zato bi lahko povzročila nepravilnosti v podatkih. Na primer, lahko posodobite proizvajalca, ne da bi posodobili model, in uvedli netočnosti.
Da bi bil skladen, bi morali premakniti dodatni odvisni stolpec v drugo tabelo in ga sklicevati z uporabo tujih ključev. To bi povzročilo dve tabeli:
Vozna miza
V spodnji tabeli je modelID tuje ključno kodo Modeli tabela:
- VehicleID
- Proizvajalec
- ModelID
Tabela modelov
Ta nova tabela prinaša modele proizvajalcem. Če želite posodobiti vse podatke o vozilu, ki so specifični za model, to storite v tej tabeli in ne v tabeli Vozila.
- ModelID
- Proizvajalec
- Model
Izvedena polja v modelu 3NF
Tabela lahko vsebuje izpeljano polje - eno, ki se izračuna na podlagi drugih stolpcev v tabeli. Na primer, upoštevajte to tabelo naročil v pripomočkih:
- Številka naročila
- Številka kupca
- Cena na enoto
- Količina
- Skupaj
Skupno odstopa skladnost 3NF, ker se lahko izpelje z množenjem cene na enoto za količino, namesto da bi bila popolnoma odvisna od primarnega ključa. Odstraniti jo moramo iz tabele tako, da ustreza tretji normalni obliki.
Dejansko, ker je izpeljano, je bolje, da ga sploh ne shranite v bazo podatkov.
Pri opravljanju poizvedb baz podatkov lahko preprosto izračunamo "na leti". Na primer, morda smo prej uporabili to poizvedbo za pridobivanje številk naročil in seštevka:
SELECT OrderNumber, Total FROM WidgetOrders
Zdaj lahko uporabimo naslednjo poizvedbo:
SELECT OrderNumber, UnitPrice * Količina AS Total FROM WidgetOrders
doseči enake rezultate, ne da bi kršil pravila normalizacije.