# Normální formy a dekompozice **Úvod** - normální formy se vztahují jen k jedné relaci $R$ - označují se pořadovými čísly, 1NF až 5NF - NF s vyšším pořadovým číslem předpokládá, že se relace $R$ nachází v NF s nižším číslem včetně umístění BCNF (meni 3NF a 4NF) - platí úmluva, že v návrzích by relace měly splňovat 3NF - každá NF odhaluje (popisuje) nějakou diplicitu **První normální forma** (1NF) - relace $R$ se nachází v 1NF, pokud všechny komponenty n-tice jsou atomické (řetězce znaků), tj. komponentou nesmí být opět relace - poznámka - pokud v relačním SŘBD vytvoříme tabulku, je v 1NF, jinak to nejde - příklad - Přednáška(Předmět, Učitel, Místnost, Hodina, **Zkoušení**) - **Zkoušení**(Student, Známka) **Druhá normální forma** (2NF) - relace $R$ se nachází v 2NF - jestliže je v 1NF - každý atribut, který není součástí primárního klíče relace $R$, silně funkčně závisí na primárním klíči relace $R$ - poznámka - hledáme, zda některý neklíčový atribut nezávisí na některém atributu, který tvoří primární klíč - pokud je primární klíč tvořen jediným atributem, je 2NF splněna triviálně - příklad - Dodávka(**č_Dodavatele**, č_Součástky, **Adresa**, Množství) - v reálném světě platí funkční závislost č_dodavatele $\to$ adresa - adresu převést do samostatné tabulky s dodavatelem **Třetí normální forma** (3NF) - relace $R$ se nachází v 3NF - jestliže je v 2NF - každý atribut, který není součástí primárního klíče relace $R$, není tranzitivně závislý na primárním klíči relace $R$ - poznámka - hledáme, nezávisí některý neklíčový atribut na jiném neklíčovém atributu - pokud relace obsahuje maximálně jeden neklíčový atribut, 3NF je splněna triviálně - pokud tabulka obsahuje pouze dva sloupce, splňuje 3NF (PK tvořen 1-2 sloupci) - příklad - Zaměstnanci(č_Zaměstnance, Oddělení, Budova) - předpokládejme, že oddělení se nachází jen v jedné budově, poté platí funkční závislost oddělení $\to$ budova - budovu převést do samostatné tabulky s oddělením **V jaké NF se nachází relace R?** | A | B | C | D | | --- | --- | --- | -------- | | a | 1 | A | $\alpha$ | | b | 1 | A | $\beta$ | | c | 2 | B | $\gamma$ | | a | 1 | C | $\delta$ | | b | 3 | D | $\alpha$ | - primární klíč: **A, C** - relace je v 1NF - relace není ve 2NF - $A \to B$, $A \to D$ - neplatí - $C \to B$ - **platí** - $C \to D$ - nezkoumáno - relace není ve 3NF (není ve 2NF) + primární klíč: **A, D** - relace je v 1NF - relace je ve 2NF - $A \to B$, $A \to C$, $D \to B$, $D \to C$ - neplatí - relace není ve 3NF - $B \to C$ - neplatí - $C \to B$ - platí - primární klíč: **B, D** - relace je v 1NF - relace je ve 2NF - $B \to A$, $B \to C$, $D \to A$, $D \to C$ - neplatí - relace je ve 3NF - $A \to C$, $C \to A$ - neplatí ## Dekompozice Převedení relace do 2NF nebo 3NF se provede rozkladem původní relace. **Věta o dekompozici:** Mějme relaci $R$ a tři disjunktní množiny atributů $A, B, C$, které zahrnují všechny atributy relačního schématu relace $R$ a funkční závislosti $B \to C$. Rozložíme-li relaci $R$ na relace $R_{1}(B, C)$ a $R_{2}(A, B)$, potom řekneme, že takto provedená dekompozice je **bezeztrátová**. **Syntéza** - Je dána relace $R(A, B, C)$ a její projekce $\Pi_{B,C}(R)$ a $\Pi_{A,B}(R)$. Pak přirozeným spojením těchto projekcí získáme zpět původní relaci $R$. - Syntéza chybně provedené dekompozice (tzv. **ztrátové**) vede k situaci, že obvykle získáme nějakou n-tici navíc, ale říkáme tomu **ztrátovost**. ## Pokročilé NF **Boyce-Coddova normální forma** (BCNF) - relace $R$ se nachází v BCNF - jestliže je v 3NF - každý determinant je kandidátem klíče - poznámka - existují různé definice BCNF - nalezneme všechny funkční závislosti a u každé určíme, zda jejich determinant může být primárním klíčem a pokud některá nemůže být primárním klíčem, potom relace $R$ není v BCNF - příklad - Adresář(město, ulice, PSČ) - závislosti - {město, ulice} $\to$ PSČ - PSČ $\to$ město - relace je v 3NF, ale druhá funkční závislost brání být v BCNF - dekompozice - Město(město, PSČ) - Ulice(PSČ, ulice) **Multizávislost** - z definice funkční závislosti vyplývá, že pokud $A \to B$, pak každá hodnota atributu $A$ určuje (nejvýše) jednu hodnotu atributu $B$ - **Multizávislost (vícehodnotová závislost)** vyžaduje závislost mezi množinami atributů $A$ a $B$ relačního schématu $X$ relace $R, R(X)$ takovou, že pro každou n-tici hodnot množiny atributů $A$ existuje nějaká množina n-tic hodnot množiny atributů $B$ a tato množina přitom nezávisí na hodnotě ostatních atributů relace $R$ - značíme $A \to\to B$