Uvedenie databázy do tretej normálnej formy (3NF)

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:

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:

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:

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 :

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á.

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í:

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 WidgetOrders

Teraz môžeme použiť nasledujúci dopyt:

SELECT OrderNumber, UnitPrice * Množstvo AS Celkom FROM WidgetOrders

aby sa dosiahli rovnaké výsledky bez porušenia pravidiel normalizácie.