Přejít na hlavní obsah

Tabulka je ve druhé normální formě když neexistují multiciferné závislosti a každý neklíčový atribut je zcela závislý na primárním klíči

  • Daniela Vlček
  • Tipy

V procesu navrhování databází je důležitým aspektem organizace dat do tabulek a jejich normalizace. Jednou z klíčových normalizací je druhá normální forma (2NF), která umožňuje odstranit problémy s duplicitou dat a související anomálie při aktualizaci, přidávání a mazání informací.

Tabulka je považována za druhou normální formu, pokud splňuje dvě kritéria. Za prvé, musí existovat primární klíč, který se skládá z jednoho nebo více polí, která jedinečně identifikují každý záznam v tabulce. Za druhé, každý bezklíčový atribut (pole) by měl být plně funkčně závislý na primárním klíči.

Tento druhý normalizační krok pomáhá rozdělit data do propojených tabulek, které podporují referenční integritu a zlepšují zpracování dat. Snižuje také množství uložených dat, zlepšuje výkon dotazů a zajišťuje efektivní využití paměti.

Co je druhá normální forma?

Základní myšlenkou druhého normálního tvaru je odstranit funkční závislosti mezi neklíčovými atributy a částí primárního klíče. Jinými slovy, každý atribut v tabulce by měl zcela záviset na celém primárním klíči, nejen na jeho části.

Pro dosažení druhé normální formy je nutné splnit dvě podmínky:

  • Tabulka by měla být v první normální formě (1NF).
  • Všechny bezlepkové atributy by měly zcela záviset na celém primárním klíči.

Druhá normální forma pomáhá zlepšit strukturu dat v tabulkách a vyhnout se redundanci a anomáliím při práci s databází. Umožňuje efektivnější ukládání a zpracování dat a poskytuje jednodušší a přehlednější strukturu tabulek v databázi.

Definice a základní principy

První normální formou (1NF) je požadavek, aby pole tabulky byla atomární. To znamená, že by neměly obsahovat duplicitní skupiny dat. Druhá normální forma se snaží odstranit funkční závislost mezi nepoužitelnými klíči tabulky a jejími sloupci.

Základní principy, které musí tabulka splňovat ve druhé normální formě, jsou:

  1. Všechny nepoužitelné klíče by měly být zcela závislé na primárním klíči tabulky.
  2. Mezi sloupci tabulky nejsou žádné nedotknutelné funkční závislosti.

Princip úplné funkční závislosti znamená, že všechny nepoužitelné klíče by měly záviset pouze na celém primárním klíči, nikoli na jeho složkách. Pokud je libovolné pole závislé pouze na jedné části primárního klíče, je nutné toto pole rozdělit do samostatné tabulky.

Druhý princip vyžaduje, aby mezi sloupci tabulky nebyly žádné nedotknutelné funkční závislosti. To znamená, že každý sloupec v tabulce by měl záviset pouze na jejím primárním klíči, nikoli na ostatních sloupcích.

Proč je důležitá druhá normální forma?

Zde je několik důvodů, proč je důležitá druhá normální forma:

  1. Eliminace redundance dat: 2NF vám umožňuje zbavit se duplicitních hodnot a struktur, což snižuje množství uložených dat a usnadňuje jejich aktualizaci a podporu.
  2. Zlepšení efektivity dotazů: díky normalizaci 2NF lze vytvořit optimálnější požadavky na databázi, což urychluje provádění operací vyhledávání a třídění.
  3. Prevence datových anomálií: aplikace 2NF minimalizuje riziko datových abnormalit, jako je duplicita informací, ztráta dat nebo nesprávné výpočetní výsledky.

Pokud tabulka neodpovídá druhé normální formě, dochází k problémům s integritou dat, složitostí aktualizace a manipulace s těmito daty a neúčinností provádění dotazů do databáze. Proto je třeba usilovat o to, aby všechny tabulky v databázi odpovídaly druhé normální formě.

Problémy v rozporu s normalizací

Při porušení normalizace tabulky a absenci druhé normální formy mohou nastat následující problémy:

  • Duplikace dat: pokud jsou v tabulce duplicitní data, existuje riziko chyb při aktualizaci, mazání nebo vkládání nových dat.
  • Ztráta integrity: nedostatek hierarchické struktury v datech může vést k problémům s integritou dat a vzniku rozporů.
  • Potíže s doprovodem: nenormalizovaná tabulka vyžaduje větší úsilí k podpoře a změně, protože změna jedné části dat může vyžadovat změnu na více místech.
  • Problémy s výkonem: abnormalizovaná tabulka může zabírat více místa na disku a vyžadovat více prostředků k provádění požadavků, což může vést ke snížení výkonu systému.

Pro řešení těchto problémů se doporučuje dodržovat normalizaci a rozdělit tabulky na menší a související.

Základní charakteristiky tabulky ve druhé normální formě

Ve druhé normální formě (HNF) má tabulka následující základní charakteristiky:

  • V tabulce nejsou žádné atributy, které by závisely na složeném klíči.
  • Každý bezklíčový atribut závisí pouze na celém složeném klíči.

První charakteristika znamená, že neklíčové atributy nezávisí na části složeného klíče, ale pouze na celém klíči. Pokud má tedy tabulka například složený klíč, který se skládá ze dvou atributů, pak bude každý neklíčový atribut záviset pouze na těchto dvou atributech dohromady, nikoli na jednom z nich.

Druhá charakteristika zajišťuje, že každý bezklíčový atribut závisí pouze na celém složeném klíči a není funkčně závislý na jiných bezklíčových atributech. To umožňuje flexibilnější a efektivnější ukládání a zpracování dat v tabulce.

Tabulky ve druhé normální formě jsou strukturovanější a umožňují efektivnější správu dat, minimalizují redundanci informací a poskytují přesnější a spolehlivější výsledky dotazů do databáze.

Jedna hodnota pro každý sloupec

V tabulce odpovídající druhému normálnímu tvaru by měl každý sloupec obsahovat pouze jednu hodnotu pro každý řádek. To znamená, že každé pole v tabulce musí být atomární, to znamená, že se nerozděluje na menší složky.

Podívejme se například na tabulku "zaměstnanci" s poli "Jméno", "Příjmení" a "telefon". Pokud se ve sloupci "telefon" uloží několik telefonních čísel oddělených čárkami, poruší to druhý normální tvar. Místo toho musí být každé telefonní číslo uloženo v samostatném řádku, který je spojen s konkrétním zaměstnancem.

Dodržování tohoto principu umožňuje efektivnější práci s daty v tabulce a vyhýbání se problémům souvisejícím s ukládáním a zpracováním více hodnot v jedné buňce.

Unikátní identifikátor

Jedinečný identifikátor může být reprezentován jedním nebo více sloupci v tabulce. Obvykle je vybírán ze sady atributů, které nejpřesněji definují každou položku. Například v tabulce studenti může být jedinečným identifikátorem sloupec ID (ID), který obsahuje jedinečné číslo každého studenta.

Použití jedinečného identifikátoru usnadňuje identifikaci každého záznamu v tabulce a jeho propojení s jinými tabulkami pomocí externích klíčů. Jedinečný identifikátor pomáhá zajistit integritu dat a zlepšit výkon databázových dotazů.

Závislost pouze na primárním klíči

Ve druhé normální formě (2NF) by tabulka měla mít jeden nebo složený primární klíč a měla by být závislá pouze na tomto klíči. Závislost znamená, že hodnoty atributů v tabulce lze určit pouze podle hodnot primárního klíče.

To znamená, že pokud má tabulka atributy, které závisí na jiných atributech, nejen na primárním klíči, pak tato tabulka porušuje druhý normální tvar. Tato závislost naznačuje, že data nejsou dobře strukturovaná a mohou vést k problémům při aktualizaci dat a provádění dotazů.

Chcete-li tento problém vyřešit, musíte vzít závislé atributy do samostatné tabulky a vytvořit mezi nimi spojení. To umožňuje lepší strukturování dat a usnadňuje provádění operací s tabulkou.

Pole tabulkyPříčina porušení 2NFJak opravit
Číslo objednávkyMožná existují pole, která závisí na čísle objednávky, ale ne na primárním klíči (například datum objednávky nebo stav)Zobrazit pole závislá na čísle objednávky (datum objednávky, stav atd.) v samostatné tabulce s odkazem na číslo objednávky jako externí klíč
Kód zbožíMožná existují pole, která závisí na kódu zboží, ale ne na primárním klíči (např. název zboží nebo cena)Vložte pole závislá na kódu zboží (název zboží, cena atd.) do samostatné tabulky s odkazem na Kód zboží jako externí klíč

Příklad tabulky ve druhé normální podobě

Níže je uveden příklad tabulky, která je databází o zákaznících a objednávkách v e-shopu:

Tabulka"Zákazníci"

  • klient_id (PK) - jedinečný identifikátor klienta
  • name-jméno klienta
  • telefon-telefon zákazníka
  • e-mail-e-mail zákazníka

Tabulka"Objednávky"

  • order_id (PK) - jedinečný identifikátor objednávky
  • klient_id (FK) - identifikátor klienta propojující tabulku"zákazníci"
  • datum-datum objednávky
  • total_price-celková hodnota objednávky
  • status-Stav objednávky

V tomto příkladu jsou tabulky "zákazníci" a "objednávky" ve druhé normální formě, protože všechny atributy jsou atomární (nerozdělují se na menší části) a každý neklíčový atribut je zcela závislý na primárním klíči.

Tabulka "klienti" má primární klíč client_id, který jedinečně identifikuje každý záznam. Atributy name, phone a email jsou zcela závislé na hodnotě primárního klíče a týkají se výhradně daného klienta.

Tabulka " objednávky "má primární klíč order_id a také externí klíč client_id, který je spojen s tabulkou"zákazníci". Atributy date, total_price a status jsou zcela závislé na hodnotě primárního klíče a odkazují na konkrétní objednávku. Pomocí externího klíče client_id je možné propojit objednávku s příslušným zákazníkem.