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

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