První normální formulář (1NF) má dvě základní pravidla pro normalizovanou a organizovanou databázi. Prvním je vyloučení duplicitních sloupců ze stejné tabulky. Druhým je vytvoření samostatných tabulek pro každou skupinu souvisejících dat a identifikace každého řádku s jedinečným sloupcem (primární klíč). Co tato pravidla znamenají, když uvažujete o praktickém návrhu databáze?
Eliminujte duplikaci
První pravidlo určuje, že nesmíme duplikovat data ve stejném řádku tabulky. V rámci databázové komunity se tento koncept označuje jako atomicita tabulky. O tabulkách, které splňují toto pravidlo, se říká, že jsou atomové. Prozkoumejme tento princip na klasickém příkladu: tabulka v databázi lidských zdrojů, ve které je uložen vztah mezi podřízeným a manažerem. Pro účely našeho příkladu zavedeme obchodní pravidlo, že každý manažer může mít jednoho nebo více podřízených, zatímco každý podřízený může mít pouze jednoho manažera. Při vytváření seznamu nebo tabulky ke sledování těchto informací můžeme intuitivně vytvořit tabulku s následujícími poli:
- Manažer
- Podřízený1
- Podřízený2
- Podřízený3
- Podřízený4
Připomeňme si však první pravidlo uložené 1NF: Eliminujte duplicitní sloupce ze stejné tabulky. Je zřejmé, že sloupce Podřízený1 až Podřízený4 jsou duplicitní. Udělejte si chvilku a přemýšlejte o problémech vyvolaných tímto scénářem. Pokud má manažer pouze jednoho podřízeného, jsou sloupci Podřízený2 až Podřízený4 zbytečný úložný prostor (vzácná komodita databáze). Dále si představte případ, kdy má manažer čtyři podřízené. Co se stane, když přijmou jiného zaměstnance? Struktura tabulky by vyžadovala úpravu. V tomto okamžiku se databázovým nováčkům obvykle naskytne druhý jasný nápad: Nechceme mít více než jeden sloupec a chceme umožnit flexibilní množství datového úložiště; zkusme něco takového:
- Manažer
- Podřízené
A pole Podřízení by obsahovalo více položek ve formě „Marie, Bille, Joe.“ Toto řešení je blíže, ale také nedosahuje úrovně. Sloupec podřízených je stále duplicitní a neatomický. Co se stane, když potřebujeme přidat nebo odebrat podřízeného? Musíme přečíst a zapsat celý obsah tabulky. V této situaci to není velký problém, ale co kdyby jeden manažer měl sto zaměstnanců? Také to komplikuje proces výběru dat z databáze v budoucích dotazech. Tady je tabulka, která splňuje první pravidlo 1NF:
- Manažer
- Podřízený
V tomto případě má každý podřízený jeden záznam, ale manažeři mohou mít více záznamů.
Určete primární klíč
A co druhé pravidlo: Každý řádek identifikujte jedinečným sloupcem nebo sadou sloupců (primární klíč). Můžete se podívat na výše uvedenou tabulku a navrhnout použití sloupce Podřízený jako primárního klíče. Ve skutečnosti je sloupec Podřízený dobrým kandidátem na primární klíč, protože naše obchodní pravidla určovala, že každý podřízený může mít pouze jednoho správce. Data, která jsme se rozhodli uložit do naší tabulky, však z toho činí méně než ideální řešení. Co se stane, když najmeme dalšího zaměstnance jménem Jim? Jak uložíme jeho vztah manažer-podřízený do databáze? Nejlepší je použít jedinečný identifikátor, například ID zaměstnance jako primární klíč. Náš finálový stůl by vypadal takto:
- ID manažera
- Podřízené ID
Nyní je naše tabulka v první normální formě. Kromě toho existují možnosti pro umístění vaší databáze do druhé normální formy, stejně jako do třetí normální formy, pokud jste nadšení z další organizace.