Normalizácia databáz: definícia, normálne formy a príklady
Normalizácia databáz: vysvetlenie, normálne formy a praktické príklady. Naučte sa zlepšiť integritu, znížiť redundanciu a optimalizovať návrh relačných databáz.
Normalizácia databáz je prístup k návrhu databáz, ktorý zaviedol Edgar F. Codd v 70. rokoch 20. storočia. Niektoré databázy, známe ako relačné databázy, umožňujú ukladanie údajov do samostatných skupín. Každá skupina sa bežne nazýva tabuľka. Na poskytovanie užitočných informácií sú tieto skupiny navzájom prepojené. Napríklad študenti môžu byť uložení v jednej skupine a triedy v inej skupine. Aby sa ukázalo, že študent je zapísaný do triedy, vytvorí sa „vzťah“ medzi jednou skupinou a druhou. Študent by mohol mať vzťah k mnohým triedam, z ktorých každá by bola zapísaná, zatiaľ čo trieda by mala vzťah k mnohým študentom.
Tradičnou alternatívou je „databáza plochých súborov“, kde sú všetky údaje zoskupené ako v tabuľke. Problémom databáz plochých súborov je, že môžu mať veľa prázdnych miest a pri každom zázname sa musí opakovať veľa informácií. To znamená, že databáza je väčšia, ako musí byť, a zvyšuje sa pravdepodobnosť, že databáza bude obsahovať chyby. Relačné databázy rozdelením údajov do skupín znižujú pravdepodobnosť výskytu chýb a nezaberajú viac miesta, ako je potrebné. Aby však fungovala, musí byť dobre navrhnutá.
Prečo normalizovať
Normalizácia databáz je metóda návrhu kvalitných relačných databáz. Cieľom je
- eliminovať nepotrebnú redundanciu (duplicitné údaje),
- znížiť vzniku anomálií pri vkladaní, aktualizácii a mazaniu údajov,
- zabezpečiť konzistenciu dát pomocou jasne definovaných závislostí.
Anomálie, ktorým normalizácia predchádza:
- Update anomaly – pri aktualizácii jednej hodnoty je potrebné meniť ju na viacerých miestach;
- Insert anomaly – nemožnosť vložiť nový záznam bez zadania nepovinných údajov;
- Delete anomaly – odstránením jedného záznamu stratíme aj iné dôležité informácie.
Dôležité pojmy
Predtým, než prejdeme na normálne formy, je užitočné poznať niekoľko základných pojmov:
- Attribút – stĺpec v tabuľke (napr. meno, e-mail).
- Tuple – riadok v tabuľke (jeden záznam).
- Primárny kľúč – atribút alebo kombinácia atribútov, ktoré jednoznačne identifikujú riadok.
- Funkčná závislosť – vzťah A → B znamená, že hodnota A určuje hodnotu B.
- Kandidátny kľúč – atribút (alebo kombinácia), ktorý môže byť primárnym kľúčom.
Normálne formy (prehľad)
Codd pôvodne definoval tri základné normálne formy (1NF, 2NF, 3NF). Postupne boli pridané ďalšie (BCNF, 4NF atď.). Každá normálna forma zavádza pravidlá, ktorými sa znižuje určitý typ redundancie alebo závislosti.
Prvá normálna forma (1NF):
- Každé pole obsahuje atómickú (nedeliteľnú) hodnotu — žiadne opakujúce sa skupiny ani zoznamy v jednom poli.
- Každý riadok je jedinečný (existuje primárny kľúč).
Druhá normálna forma (2NF):
- Musí byť v 1NF.
- Každý ne-kľúčový atribút musí byť plne funkčne závislý od celého primárneho kľúča. V praxi sa 2NF týka najmä situácií s kompozitným (zloženým) kľúčom — zakazuje čiastočné závislosti.
Tretia normálna forma (3NF):
- Musí byť v 2NF.
- Žiadny ne-kľúčový atribút nesmie byť transitívne závislý od primárneho kľúča (t. j. A → B a B → C nie je prípustné pre ne-kľúčový C).
Boyce–Coddova normálna forma (BCNF):
- Silnejšia verzia 3NF: pre každú funkčnú závislosť X → Y musí byť X supersetom kandidátneho kľúča. Odstraňuje niektoré zvláštne prípady, kde 3NF nestačí.
Štvrtá normálna forma (4NF):
- Zaoberá sa viachodnotovými závislosťami (multi-valued dependencies) a ich odstránením.
Vlastnosti správnej dekompozície
Pri rozdeľovaní tabuľky na viacero tabuliek (dekompozícii) sa sledujú dve dôležité vlastnosti:
- Lossless join – po spojením (JOIN) dekomponovaných tabuliek sa majú získať pôvodné záznamy bez straty informácií.
- Dependency preservation – po dekompozícii by sa mali zachovať významné funkčné závislosti, alebo aspoň ich kontrola zostáva možná pomocou pravidiel/obmedzení DBMS.
Ako normalizovať — krok za krokom
- Identifikujte všetky atribúty a navrhnite primárny kľúč (prípadne kandidátne kľúče).
- Zistite funkčné závislosti medzi atribútmi (kto určuje koho).
- Upravte štruktúru tak, aby boli odstránené čiastočné a potom transitívne závislosti (prechod na 2NF, potom 3NF).
- Overte vlastnosti lossless join a dependency preservation.
- V prípade potreby riešte ďalšie normálne formy (BCNF, 4NF).
- Pri rozhodovaní zvažujte výkon — v niektorých prípadoch môže byť účelné denormalizovať pre rýchlejšie čítanie.
Praktické dôsledky a kompromisy
Normalizácia zvyšuje konzistenciu a znižuje duplikáciu, no môže viesť k väčšiemu počtu JOIN operácií pri dotazoch, čo môže zhoršiť výkon pri častých zložitých čítaniach. Preto sa v praxi často používa zmiešaný prístup:
- Databáza navrhnutá do 3NF/BCNF pre konzistenciu a úsporu miesta.
- Indexovanie, materializované pohľady alebo cielene denormalizované tabuľky pre kritické dotazy, kde je výkon dôležitejší ako minimálna redundancia.
Príklad (ilustratívny)
Predstavme si pôvodnú tabuľku:
StudentsCourses(StudentID, StudentName, CourseID, CourseName, Instructor)
Problémy: CourseName a Instructor sa opakujú pre každého študenta v tom istom kurze; ak sa zmení meno kurzu alebo lektora, musíme upraviť viaceré záznamy (update anomaly).
Normalizáciou môžeme dekomponovať na:
- Students(StudentID, StudentName)
- Courses(CourseID, CourseName, Instructor)
- Enrollments(StudentID, CourseID) — vztah medzi študentom a kurzom
Takáto dekompozícia znižuje duplicitu a odstraňuje update/insert/delete anomálie; zároveň zachováva možnosť zostaviť pôvodné informácie pomocou JOIN medzi tabuľkami.
Zhrnutie
Normalizácia je systematický postup pri návrhu relačných databáz, ktorý pomáha udržiavať údaje konzistentné a bez zbytočných duplicitných informácií. Zároveň si vyžaduje uváženie výkonových aspektov — niekedy je vhodné uprednostniť rýchlosť čítania (denormalizácia) pred úplnou elimináciou redundancie. Rozumné použitie normálnych foriem spolu s indexami, transakciami a integritnými obmedzeniami vedie k spoľahlivej a efektívnej databáze.
Otázky a odpovede
Otázka: Čo je normalizácia databázy?
Odpoveď: Normalizácia databáz je prístup k navrhovaniu databáz, ktorý zaviedol Edgar F. Codd v 70. rokoch 20. storočia. Zahŕňa rozdelenie údajov do samostatných skupín, známych ako tabuľky, a vytvorenie vzťahov medzi nimi s cieľom poskytnúť užitočné informácie.
Otázka: Čo je to databáza s plochým súborom?
Odpoveď: Databáza s plochým súborom je taká, v ktorej sú všetky údaje zoskupené ako v tabuľke. To môže viesť k množstvu prázdnych miest a opakujúcich sa informácií, čo zvyšuje pravdepodobnosť výskytu chýb.
Otázka: Ako relačné databázy znižujú pravdepodobnosť výskytu chýb?
Odpoveď: Relačné databázy rozdeľujú údaje do skupín, čím znižujú pravdepodobnosť vzniku chýb a nezaberajú viac miesta, ako je potrebné.
Otázka: Čo sú to normálne formy?
Odpoveď: Normálne formy sú kritériá, ktoré musia spĺňať rôzne databázy, aby boli dobre navrhnutými relačnými databázami. Existuje niekoľko "normálnych foriem", z ktorých každá má svoj vlastný súbor pravidiel, ktoré by mala databáza spĺňať.
Otázka: Aké sú niektoré nevýhody splnenia určitých súborov kritérií pre normálne formy?
Odpoveď: Nevýhodou splnenia takéhoto súboru kritérií je zvyčajne to, že sa sťaží vyhľadávanie určitých údajov v databáze.
Prehľadať