# 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$