Normalizace je proces organizace dat za účelem snížení redundance a zlepšení integrity rozdělením dat do souvisejících tabulek podle řady "normálních forem". Cíl: každá informace je uložena jednou, čímž se vyhneme duplikaci a anomáliím, které ji způsobují.
Problém: nenormalizovaná (redundantní) tabulka
❌ orders table with everything in one place — data is DUPLICATED:
order_id | customer_name | customer_email | product | price
1 | Ann | [email protected] | Phone | 999
2 | Ann | [email protected] | Case | 20 ← Ann's info repeated!
Problems (anomalies):
✗ UPDATE anomaly — change Ann's email → must update EVERY one of her orders
✗ INSERT anomaly — can't add a customer without an order
✗ DELETE anomaly — deleting Ann's last order loses her info entirely
✗ Wasted storage and inconsistency risk
Řešení: rozdělení do souvisejících tabulek
✅ NORMALIZED — each entity in its own table, linked by keys:
customers: id | name | email (Ann stored ONCE)
products: id | name | price
orders: id | customer_id | product_id (references the others)
→ Change Ann's email in ONE place; no duplication; no anomalies.
Normalizace rozděluje data tak, aby každá informace existovala na jednom místě — informace o zákazníkovi v customers, produkty v products a orders se na ně odkazují pomocí klíčů.
Normální formy (postupně přísnější)
1NF → atomic values (no repeating groups / multi-valued columns), a primary key
2NF → 1NF + no partial dependency (non-key columns depend on the WHOLE primary key)
3NF → 2NF + no transitive dependency (non-key columns depend ONLY on the key, not
on other non-key columns)
→ 3NF is the common practical target; BCNF, 4NF, 5NF exist for stricter cases.
Normalizace versus denormalizace (kompromis)
Normalized → less redundancy, better integrity, but more JOINs (can be slower reads)
Denormalized → some duplication for FEWER joins → faster reads (e.g. analytics/reporting)
→ Normalize by default (integrity); selectively denormalize for read performance
where justified (with care to keep duplicates consistent).
Proč na tom záleží
Normalizace je základní koncept návrhu databází — jedná se o způsob, jak strukturovat data, aby se vyhnula redundanci a udržela se integrita, což je nezbytné pro návrh spolehlivých relačních databází, proto je jejímu porozumění důležité.
Hlavní hodnota spočívá v prevenci anomálií, které způsobují redundantní (nenormalizovaná) data: anomálie aktualizace (změna duplikovaných dat na mnoha místech, s rizikem nekonzistence), anomálie vložení (nelze přidat data bez nesouvisejících dat) a anomálie smazání (ztráta dat při mazání souvisejících záznamů) — to vše vede k nekonzistentním, poškozených datům.
Rozdělením dat do souvisejících tabulek tak, aby byla každá informace uložena jednou, normalizace eliminuje tyto problémy a zajišťuje konzistenci dat.
Porozumění normálním formám (zejména 1NF, 2NF a 3NF — běžný praktický cíl — a principu, že neklíčové sloupce by měly záviset na klíči) poskytuje rámec pro správný návrh.
Stejně důležité je porozumění kompromisu mezi normalizací a denormalizací: normalizace zlepšuje integritu, ale vyžaduje více JOINů (potenciálně pomalejší čtení), takže zatímco normalizujete ve výchozím nastavení pro integritu, selektivní denormalizace (přijetí určité duplikace pro méně JOINů a rychlejší čtení) je někdy ospravedlněna pro výkon (např. analytika) — vědět, kdy a proč provést tento kompromis, odráží zralý úsudek při návrhu.
Protože správné modelování dat je základem spolehlivých databází a protože porozumění normalizaci (vyhýbání se redundanci a anomáliím) a jejím kompromisům s denormalizací (integrita versus výkon čtení) je klíčové pro návrh dobře strukturovaných, konzistentních a výkonných databází, je normalizace důležitá, základní znalost pro návrh databází a běžné téma při pohovorech, které demonstruje porozumění zdravému modelování dat.
