Tretí normálny formulár (3NF) je databázový princíp, ktorý podporuje integritu údajov založený na princípoch normalizácie databázy poskytovaných prvou normálnou formou (1NF) a druhou normálnou formou (2NF).
Tretie požiadavky na normálny formulár
Existujú dva základné požiadavky na to, aby bola databáza v tretej normálnej podobe:
- Databáza musí už spĺňať požiadavky 1NF aj 2NF .
- Všetky databázové stĺpce musia závisieť od primárneho kľúča , čo znamená, že hodnota každého stĺpca môže byť odvodená iba z primárneho kľúča.
O závislosti na primárnom kľúči
Pozrime sa, čo myslíme tým, že všetky stĺpce musia závisieť od primárneho kľúča.
Ak je hodnota stĺpca odvodená z primárneho kľúča aj z iného stĺpca v tabuľke, porušuje to 3NF. Zoberme do úvahy tabuľku Zamestnanci s týmito stĺpcami:
- Identifikačné číslo zamestnanca
- Krstné meno
- Priezvisko
Majú meno LastName aj FirstName závislé len od hodnoty EmployeeID? No, mohla LastName závisieť od FirstName? Nie, pretože nič inherentné v LastName by naznačovalo hodnotu FirstName. Mohol by FirstName závisieť od LastName? Nie je to znova, pretože to isté platí: bez ohľadu na to, čo by mohlo byť meno LastName, nemohlo poskytnúť náznak, pokiaľ ide o hodnotu FirstName. Preto je táto tabuľka v súlade s 3NF.
Ale zvážte túto tabuľku vozidiel:
- VehicleID
- Výrobca
- Model
Výrobca a model môžu pochádzať z vozidla - ale model môže pochádzať aj od výrobcu, pretože model vozidla vyrába iba konkrétny výrobca. Táto konštrukcia tabuľky nie je kompatibilná s 3NF a mohla by mať za následok anomálie údajov. Môžete napríklad aktualizovať výrobcu bez aktualizácie modelu a zavádzať nepresnosti.
Aby sme boli kompatibilní, museli by sme posunúť ďalší závislý stĺpec na inú tabuľku a odkazovať sa naň pomocou cudzieho kľúča. To by viedlo k dvom tabuľkám:
Tabuľka vozidiel
V tabuľke nižšie ID modelu je cudzí kľúč v tabuľke modelov :
- VehicleID
- Výrobca
- ModelID
Tabuľka modelov
Táto nová tabuľka mapuje modely výrobcom. Ak chcete aktualizovať všetky informácie o vozidle špecifické pre model, urobíte to skôr v tejto tabuľke než v tabuľke Vozidlá.
- ModelID
- Výrobca
- Model
Odvodené polia v modeli 3NF
Tabuľka môže obsahovať odvodené pole, ktoré je vypočítané na základe ďalších stĺpcov v tabuľke. Zvážte napríklad túto tabuľku objednávok miniaplikácií:
- Číslo objednávky
- Zákaznícke číslo
- Jednotková cena
- množstvo
- totálnej
Celková hodnota porušuje súlad 3NF, pretože môže byť odvodená vynásobením jednotkovej ceny množstvom skôr ako úplnou závislosťou na primárnom kľúči. Musíme ho odstrániť z tabuľky, aby sme splnili tretí normálny formulár.
V skutočnosti, pretože je odvodený, je lepšie ho vôbec neukladať do databázy.
Jednoducho ju môžeme vypočítať "za behu" pri vykonávaní databázových dopytov. Napríklad sme mohli použiť tento dopyt na získanie čísel objednávok a súčtov:
SELECT OrderNumber, Celkom FROM WidgetOrdersTeraz môžeme použiť nasledujúci dopyt:
SELECT OrderNumber, UnitPrice * Množstvo AS Celkom FROM WidgetOrdersaby sa dosiahli rovnaké výsledky bez porušenia pravidiel normalizácie.