Skip to main content

Ako previesť databázu na tretí normálny formulár (3NF)

Anonim

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:

  • Zamestnanecké ID
  • 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ľúč k modely tabuľka:

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