Prenos baze podatkov v tretjo običajno obliko (3NF)

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:

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:

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:

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 zunanji ključ tabele » Modeli «:

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.

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:

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.