Slovník pojmů

Normalizace databáze

Normalizace omezuje rozpory v datech, ne počet sloupců za každou cenu. Cílem je mít pro důležitý fakt jasný zdroj pravdy, dokud měřený důvod nevyžaduje řízenou kopii.

Stručná definice

Jeden fakt má mít jedno smysluplné místo.

Normalizace rozpoznává údaje, které se opakují, a odděluje je podle skutečného významu. Když se aktuální název výrobce opakuje ve stovkách produktových záznamů, každá jeho změna hrozí rozporem. Samostatný záznam výrobce s odkazem z produktu pak chrání aktuální katalogový fakt na jednom místě.

Nejde o příkaz rozdělit vše do maximálního počtu tabulek. Historická cena, název produktu nebo výrobce v položce objednávky mohou být oprávněný snapshot, protože znamenají jiný časový fakt než aktuální katalog. Denormalizace pro vyhledávání, reporting nebo cache také může být správná, pokud má zdroj, způsob aktualizace a dohled nad zastaralostí.

Jaký problém řeší

Opakování dat a anomálie při jejich změně

Normalizovaný model je praktický hlavně pro transakční data, která se často mění a musejí zůstat konzistentní.

  • objednávka a opakující se položky místo seznamu v jednom poli
  • zákazník, produkt, výrobce a kategorie jako samostatné fakta
  • jedna změna názvu výrobce místo opravy stovek řádků
  • ochrana před smazáním poslední objednávky spolu s jediným záznamem produktu
  • odvozený vyhledávací index nebo cache s vědomou, řízenou duplicitou

Praktický model

Od opakování k jasným faktům

Neuspořádaný řádek může vypadat jako „1001 | Jana Nováková | Boty, ponožky | Acme, Acme“. Normalizovaný model rozdělí zákazníka, objednávku, položky, produkt, výrobce a kategorii do jejich vlastních záznamů. Vztahy pak vyjádří klíče místo textového seznamu.

Výsledný report může stále data spojit SQL dotazem. Vyhledávací index může navíc držet denormalizovaný produktový dokument, ale musí se synchronizovat z primárních dat.

Jak funguje

Od smíšeného exportu k souvisejícím tabulkám

Textová alternativa: neuspořádaný řádek objednávky se rozdělí na zákazníka, objednávku, položky, produkt a referenční vazby.

  1. Najít opakování Model odhalí produkty jako seznam v textu nebo výrobce opakovaného v každé položce.
  2. Popsat fakta Zákazník, objednávka, položka, produkt, výrobce a kategorie mají vlastní význam.
  3. Rozdělit skupiny Více položek patří do order_items, ne do jednoho sloupce odděleného čárkami.
  4. Propojit identity Primární a cizí klíče vyjádří vztahy a constrainty ochrání jejich platnost.
  5. Kopírovat vědomě Pro reporting, fulltext nebo cache vznikne odvozená kopie jen s jasnou aktualizací a vlastníkem.

Důležité pojmy

Normalizační formy jsou praktická pomůcka.

Následující zkratky pomáhají odhalit běžné návrhové chyby bez akademického výkladu.

Anomálie při vložení

Nový produkt nebo výrobce nelze rozumně uložit bez vytvoření nesouvisející objednávky.

Anomálie při změně a smazání

Jeden fakt se musí opravit na mnoha místech, nebo se smazáním posledního řádku nechtěně ztratí jiná důležitá informace.

Funkční závislost

Jednoduše: známe-li identitu produktu, některé vlastnosti z ní jednoznačně plynou. Pomáhá odlišit vlastnost produktu od vlastnosti položky objednávky.

První až třetí normální forma

1NF vyžaduje atomické hodnoty a neschovává opakující se skupiny do jedné hodnoty; jejich rozdělení do řádků nebo tabulek je běžný důsledek návrhu. 2NF hlídá závislost na celém složeném klíči a 3NF omezuje zbytečnou závislost neklíčových údajů na jiných neklíčových údajích.

Denormalizace

Vědomá kopie nebo souhrn pro konkrétní čtení. Má mít důvod, zdroj pravdy, strategii aktualizace a kontrolu konzistence.

Vztah k podobným pojmům

Struktura dat není optimalizační index.

Normalizace řeší význam a závislosti, jiné nástroje řeší výkon konkrétních čtení.

Relační databáze
Model tabulek, klíčů a vztahů, pro který je normalizace přirozeným návrhovým nástrojem.
Databázový index
Zrychluje vybrané dotazy, ale neřeší, zda je fakt uložen na správném místě.
Elasticsearch
Často drží odvozený denormalizovaný dokument pro fulltext, ne primární transakční data.
Cache
Dočasná kopie výpočtu nebo dat; potřebuje invalidaci a nemá nahradit zdroj pravdy.

Výhody a omezení

Konzistence a výkon se navrhují společně.

Přínosy

  • méně míst, kde se může rozcházet stejný fakt
  • snazší ochrana integrity přes klíče a constrainty
  • předvídatelnější změny zákazníka, produktu či kategorie
  • lepší základ pro transakční systém a navazující odvozené modely

Časté chyby

  • dogmatické dělení každého údaje do samostatné tabulky
  • předčasná denormalizace bez strategie synchronizace
  • zaměnění normalizace s databázovým indexem nebo objektovým návrhem
  • přepis historického snapshotu aktuálním katalogovým údajem
  • považování cache či Elasticsearch za trvalý zdroj pravdy

Praktický příklad

Rozdělení objednávkového exportu

Nevhodný export může mít v orders zároveň customer_name, customer_email, product_names, manufacturer_name a několik položek v jednom textu. Při změně výrobce nebo zákazníka se stejné údaje rozpadají na více míst a položky nelze přesně filtrovat ani spojovat.

Praktičtější model má customers, orders, order_items, products, manufacturers a categories. order_items.unit_price přitom může být správný historický snapshot, protože cena v okamžiku nákupu nemá po změně katalogu zmizet.

Na co myslet

Nejdřív rozumějte datům, potom optimalizujte.

Výkonnostní problém se má měřit; kopie dat musí být vědomým návrhovým rozhodnutím.

  • rozlišit aktuální fakt od historického snapshotu
  • najít opakující se skupiny a závislosti mezi údaji
  • používat klíče a constrainty pro vztahy, které databáze vlastní
  • denormalizovaným kopiím dát zdroj, aktualizaci a monitoring
  • neřešit výkon přidáváním duplicit bez měření dotazů a indexů

Časté otázky

Normalizace v praxi

Musí být každá databáze ve třetí normální formě?

Ne. Normální formy jsou pomůcka pro návrh transakčních relačních dat, ne povinný žebříček. Záleží na významu dat, typech dotazů a ceně konzistence.

Je denormalizace chyba?

Ne, pokud jde o vědomou kopii pro konkrétní čtení, reporting nebo vyhledávání a je jasné, odkud se aktualizuje. Chybou je neřízená duplicita bez vlastníka.

Je JSONB alternativou normalizace?

Ne automaticky. Pomáhá s proměnlivým payloadem, ale u klíčových vztahů a pravidel často ztrácíte přímou integritu a cílené dotazy.

Proč ukládat cenu i do položky objednávky?

Cena v objednávce je historický fakt konkrétní transakce. Aktuální cena produktu může být jiný, později změněný údaj.

Jak tento princip používám v praxi

Datové modely dělím podle faktů, ne podle jedné obrazovky.

V e-commerce a integračních řešeních kombinuji relační zdroj pravdy s pragmatickými odvozenými modely pro vyhledávání, cache a reporting.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.