Hirugarren formatu arruntaren (3NF) datu osotasuna onartzen duen oinarrizko printzipioa da , Lehen Forma Normalaren (1NF) eta Second Normal Form (2NF) emandako datu-basearen normalizazio printzipioetan oinarrituta.
Hirugarren formulario normala
Datu-basearen oinarrizko bi baldintza daude hirugarren forma normalean:
- Datu-basearen arabera, 1NF eta 2NFren baldintzak bete behar dituzte.
- Datu-zutabe guztiek lehen mailako gakoaren menpe egon behar dute, zutabe baten balioa lehenengo tekla soilik erator daiteke.
Lehen mailako gakoen mendekotasunari buruz
Zutabe guztiek lehen mailako gakoaren araberakoa izan behar dute.
Zutabe baten balioa lehen mailako gako batetik eta beste zutabe batetik erator daiteke, 3NF urratzen du. Ikasleen taula bat zutabe hauei:
- EmployeeID
- Izena
- Abizena
Bai LastName eta FirstName bai Langilearen IDaren balioaren araberakoa da? Beno, could LastName FirstName araberakoa izango da? Ez, LastName-en inolako ezer inolako FirstName-en balioa gomendatzen ez delako. Ezin izan lehenengoa LastName araberakoa da? Berriro ere ez, egia bera delako: edozein izanik LastName izan liteke, ezin izan du FirstName-ren balioari buruzko aholku bat eman. Hori dela eta, taula hau 3NF betetzen da.
Baina kontuan hartu ibilgailu hau:
- VehicleID
- fabrikatzailea
- Model
Fabrikatzaileak eta Modelak ibilgailuen IDa izan liteke, baina eredua Fabrikatik ere sor daiteke, ibilgailu eredua fabrikatzaile jakin batek bakarrik egiten baitu. Taulen diseinua ez da 3NF betetzen, eta, beraz, datuak anomaliak izan ditzake. Adibidez, fabrikatzaileak eguneratu ahal izango dituzu eredua eguneratzean, okerrak sartuz.
Betetzeko, beste menpeko zutabea beste taula batera mugitu beharko genuke eta atzerriko gako bat erabiliz alda dezakegu. Honek bi taulan eragin litzake:
Ibilgailuen taula
Beheko taulan, ModelID kanpoko eredua da Moduluen taulara:
- VehicleID
- fabrikatzailea
- ModelID
Moduluen taula
Mahai berri honek fabrikatzaileentzako ereduak mapatzen ditu. Ibilgailuen informazio espezifiko bati eguneratu nahi badiozu, taulan egin beharko zenuke, ibilgailuetan baino.
- ModelID
- fabrikatzailea
- Model
3NF modeloko eremu deribatuak
Taula batek eratorritako eremua eduki dezake, taulan beste zutabeetan oinarrituta kalkulatutakoa. Adibidez, ikusi widget aginduen taulan hau:
- Orden zenbakia
- Bezeroaren zenbakia
- Prezio unitatea
- Kopurua
- Guztira
Guztira 3NF betetzeak haustea dakar, unitatearen prezioaren arabera kantitatearen arabera biderkatuz, lehen mailako gakoaren menpe egotea baino. Taulatik kendu behar dugu hirugarren forma normala betetzeko.
Izan ere, eratorik gero, hobe da datu-basea ez gordetzea.
Datu-baseen kontsultak egitean, besterik gabe, "euli" kalkulatu ahal izango dugu. Esate baterako, kontsulta hau lehenago erabili ahal izan dugu ordena zenbakiak eta guztirakoak eskuratzeko:
SELECT OrderNumber, Total FROM WidgetOrdersHurrengo kontsulta erabil dezakegu:
SELECT OrderNumber, UnitPrice * Quantity AS Guztira FROM WidgetOrdersemaitza berdinak lortzeko normalizazio arauak urratzen.