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

Tretia normálna forma (3NF) je princíp databázy, ktorý podporuje integritu údajov stavaním na princípy normalizácie databázy poskytuje prvá normálna forma (1NF) a druhá normálna forma (2NF). Účelom 3NF je zlepšiť spracovanie databázy a zároveň minimalizovať náklady na skladovanie.

Požiadavky na tretí normálny formulár

Aby bola databáza v 3NF, existujú dve základné požiadavky:

  • Databáza musí spĺňať požiadavky 1NF aj 2NF.
  • Všetky stĺpce databázy musia závisieť od primárny kľúč, čo znamená, že hodnotu ľubovoľného stĺpca možno odvodiť iba z primárneho kľúča.

Závislosť primárneho kľúča

Poďme ďalej preskúmať, čo máme na mysli pod tým, že všetky stĺpce musia závisieť od primárneho kľúča. Ak je možné hodnotu stĺpca odvodiť z primárneho kľúča aj z iného stĺpca v tabuľke, porušuje to 3NF. Zvážte tabuľku zamestnancov s týmito stĺpcami:

  • Identifikačné číslo zamestnanca
  • Krstné meno
  • Priezvisko

Závisia Priezvisko aj Meno iba od hodnoty ID zamestnanca? Mohlo by priezvisko závisieť od mena? Nie, pretože nič vlastné priezvisku nenaznačuje hodnotu krstného mena.

Mohlo by krstné meno závisieť od priezviska? Opäť nie, pretože to isté platí: Nech už je priezvisko akékoľvek, nemôže poskytnúť nápovedu o hodnote krstného mena. Preto je táto tabuľka v súlade s normou 3NF.

Potom zvážte túto tabuľku vozidiel:

  • VehicleID
  • Výrobca
  • Model

Výrobca a model môžu byť odvodené od VehicleID, ale model môže byť odvodený aj od výrobcu, pretože iba jeden konkrétny výrobca vyrába model vozidla. Tento dizajn tabuľky nie je v súlade s 3NF, a preto by mohol viesť k anomáliám údajov. Môžete napríklad aktualizovať výrobcu bez aktualizácie modelu, čím by ste zaviedli nepresnosti.

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

Presunutie ďalšieho závislého stĺpca do inej tabuľky a odkazovanie naň pomocou a cudzí kľúč by to vyhovovalo. Výsledkom by boli dve tabuľky, ktoré budeme nazývať „Vozidlá“ a „Modely“.

V tabuľke „Vozidlá“ je ModelID cudzím kľúčom tabuľky „Modely“:

  • VehicleID
  • Výrobca
  • ID modelu

Nová tabuľka „Models“ mapuje modely k výrobcom. Ak chcete aktualizovať akékoľvek informácie o vozidle špecifické pre daný model, urobili by ste to v tejto tabuľke a nie v tabuľke „Vozidlá“.

  • ID modelu
  • Výrobca
  • Model

Odvodené polia v modeli 3NF

Tabuľka môže obsahovať odvodené pole, ktoré je vypočítané na základe iný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
  • Celkom

Celkový počet porušuje súlad s 3NF, pretože ho možno odvodiť vynásobením jednotkovej ceny množstvom, a nie úplne závisieť od primárneho kľúča. Aby ste splnili tretí normálny formulár, musíte z tabuľky odstrániť Total.

Keďže je odvodený, je lepšie ho do databázy vôbec neukladať, ale jednoducho ho vypočítať za behu pri vykonávaní databázových dotazov. Tento dotaz sme napríklad mohli predtým použiť na získanie čísel objednávok a súčtov:

VYBERTE Číslo objednávky, Celkom
Z WidgetOrders

Teraz použite nasledujúci dotaz na dosiahnutie rovnakých výsledkov bez porušenia pravidiel normalizácie:

VYBERTE Číslo objednávky, Jednotková cena * Množstvo AKO Celkom
Z WidgetOrders