4.9 KiB
4.9 KiB
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 relaceR
- 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 relaceR
- 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í relaciR
. - 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
- {město, ulice}
- 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 atributuA
určuje (nejvýše) jednu hodnotu atributuB
- Multizávislost (vícehodnotová závislost) vyžaduje závislost mezi množinami atributů
A
aB
relačního schématuX
relaceR, 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ů relaceR
- značíme
A \to\to B