Druhá normální forma (2NF) – definice a zásady normalizace databází
Objevte jasné vysvětlení 2NF: definice, pravidla normalizace a praktické příklady odstranění částečných závislostí pro optimalizaci relačních tabulek.
Druhá normální forma (2NF) je vlastnost relačního modelu, konkrétně tabulek, která je kritériem normalizace databáze.
Prvním kritériem pro druhou normální formu je, aby tabulka byla první normální formou.
V tabulce, která je v druhém normálním tvaru, jsou data v jednotlivých sloupcích v každém řádku závislá na celém primárním klíči každého řádku. Primární klíč je jeden nebo více sloupců v řádku, který se používá k identifikaci a indexování daného řádku tabulky. Sloupce, které nesouvisejí s každým sloupcem primárního klíče, jsou odstraněny. Zachovány jsou pouze sloupce, které souvisejí se všemi sloupci primárního klíče.
Co přesně znamená „závislé na celém primárním klíči“
Termín „závislé na celém primárním klíči“ znamená funkční závislost: hodnota sloupce je určena hodnotou celého primárního klíče. Pokud je primární klíč složený (tj. více sloupců), nesmí existovat sloupec, který závisí jen na části tohoto klíče (tzv. částečná závislost). Pokud taková částečná závislost existuje, tabulka není v 2NF.
Příklady a vysvětlení
- Jednosloupcový primární klíč: Pokud má tabulka primární klíč tvořený jediným sloupcem, automaticky splňuje 2NF (pokud je v 1NF), protože každá závislost je závislostí na celém klíči.
- Složený (kompozitní) primární klíč: Například tabulka Zápis(student_id, course_id, student_name, course_name, grade). Primární klíč je (student_id, course_id). Sloupce student_name závisí pouze na student_id a course_name pouze na course_id — to jsou částečné závislosti a porušují 2NF.
Jak tabulku upravit do 2NF (praktický postup)
- Zkontrolujte, zda je tabulka v 1NF (atomické hodnoty, žádné opakující se skupiny).
- Určete primární klíč. Pokud je to jediný sloupec, pravděpodobně už je 2NF splněna.
- Pro každé neklíčové pole (atribut) ověřte, zda je funkčně závislé na celém primárním klíči nebo jen na jeho části.
- Odstraňte sloupce, které jsou závislé pouze na části složeného klíče, a umístěte je do nové tabulky. V nové tabulce by měl být jako primární klíč ta část, na které pole závisí (např. student_id → tabulka Student), nebo můžete vytvořit samostatné tabulky pro entity (Student, Course) a udržovat vazbu přes cizí klíče.
- Zachovejte vazby pomocí cizích klíčů tak, aby byla zachována integrita dat.
Příklad normalizace
Původní tabulka (porušuje 2NF):
Enrollment(student_id, course_id, student_name, course_name, grade)
Problém: student_name závisí jen na student_id, course_name jen na course_id → částečné závislosti.
Po rozdělení (v 2NF):
- Student(student_id, student_name, …)
- Course(course_id, course_name, …)
- Enrollment(student_id, course_id, grade) — vztah mezi studentem a kurzem, primární klíč (student_id, course_id)
Výhody dosažení 2NF
- Snížení redundance dat — stejné informace (např. jméno studenta) nejsou uloženy opakovaně v mnoha řádcích.
- Eliminace některých anomálií při aktualizaci, vkládání a mazání (update/insert/delete anomalies).
- Lepší struktura pro další normalizační kroky (např. 3NF).
Co 2NF neřeší
Druhá normální forma odstraní částečné závislosti vůči složenému klíči, ale neodstraní tranzitivní závislosti (kdy atribut závisí na jiném neklíčovém atributu). Ty řeší až třetí normální forma (3NF).
Jednoduchá kontrolní kontrola
- Je tabulka v 1NF? Pokud ne, začněte tam.
- Je primární klíč složený? Pokud ne, pravděpodobně je 2NF splněna.
- Existuje atribut, který závisí jen na části složeného klíče? Pokud ano → porušení 2NF → rozdělte tabulku.
Dodržení 2NF je základním krokem k dobře navržené relační databázi — pomáhá udržet data konzistentní, snadno spravovatelná a méně náchylná k chybám při aktualizacích.
Vyhledávání