FAV-ZCU/KIV DB1/07. Normální formy a dekompozice.md

105 lines
4.9 KiB
Markdown
Raw Normal View History

2024-01-08 23:05:31 +01:00
# 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ý nmeklíč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$