Metante Datumaron en Tria Normala Formo (3NF)

Tria normala formo (3NF) estas datumbaza principo, kiu subtenas la integrecon de datumoj per konstruado sur la principoj normalaj principoj provizitaj per Unua Normala Formo (1NF) kaj Dua Normala Formo (2NF).

Triaj Normalaj Formuloj

Ekzistas du bazaj postuloj por datumbazo esti en tria normala formo:

Pri la Ĉefa Ŝlosila Dependeco

Ni esploru plu kion ni signifas per la fakto, ke ĉiuj kolumnoj devas dependi de la ĉefa ŝlosilo.

Se valoro de kolumno povas esti derivita de kaj la primara ŝlosilo kaj alia kolumno en la tablo, ĝi malobservas 3NF. Pripensu tabulon de Oficistoj kun ĉi tiuj kolumnoj:

Ĉu ambaŭ LastName kaj FirstName dependas nur de la valoro de EmployeeID? Nu, Ĉu LastName povus dependi de FirstName? Ne, ĉar nenio propra en LastName sugestus la valoron de FirstName. Ĉu FirstName povus dependi de LastName? Ne denove, ĉar la sama estas vera: kio ajn estas LastName eble, ĝi ne povus doni aludon pri valoro FirstName. Sekve, ĉi tiu tablo estas 3NF-kongrua.

Sed konsideras ĉi tiun veturilon-tablon:

La fabrikanto kaj la modelo povus derivi de la VehicleID - sed la Modelo ankaŭ povus derivi de la Fabrikisto ĉar veturilo-modelo estas farita nur de aparta fabrikanto. Ĉi tiu tablo-dezajno estas ne-3NF-kongrua, kaj povus do rezultigi datumajn anomaliojn. Ekzemple, vi povus ĝisdatigi la fabrikiston sen ĝisdatigi la modelon, prezentante malkapablojn.

Por plenumi ĝin, ni bezonus movi la suplementan dependan kolumnon al alia tablo kaj referenci ĝin per fremda ŝlosilo. Ĉi tio rezultus en du tabloj:

Veturiloj Tablo

En la tablo sube, la ModeloID estas fremda ŝlosilo al la Model- tablo:

Modeloj Tabelo

Ĉi tiu nova tablo montras modelojn por fabrikantoj. Se vi volas ĝisdatigi ajnan veturilon informan specimenon al modelo, vi farus ĝin en ĉi tiu tablo, anstataŭ en la tablo de Veturiloj.

Derivitaj Kampoj en la 3NF-Modelo

Tablo eble enhavas derivaĵon - unu komputilon bazitan sur aliaj kolumnoj en la tablo. Ekzemple, konsideru ĉi tiun tablon de fenestraĵoj:

La totalo rompas 3NF-plenumon ĉar ĝi povas esti derivita multiplikante la unuopa prezo de la kvanto, anstataŭ esti plene dependa de la primara ŝlosilo. Ni devas forigi ĝin el la tablo por plenumi la trian normalan formon.

Fakte, ĉar ĝi estas derivita, estas pli bone ne stoki ĝin en la datumbazo tute.

Ni simple povas komputi ĝin "sur la muŝo" kiam plenumas datumojn de datumbazo. Ekzemple, ni eble antaŭe uzis ĉi tiun konsulton por ricevi ordojn kaj totalajn ordojn:

SELECTu Ordon Nombro, Tuta De WidgetOrders

Ni nun povas uzi la jenan konsulton:

Elektu Ordon Nombro, Unueco * Kvanto kiel Tuta De WidgetOrders

por atingi la samajn rezultojn sen malobservi normalajn regulojn.