4. Normálforma - 4NF
Motiváció
| Oktató | Város | Közterület | Tárgy | Szemeszter |
|---|---|---|---|---|
| Kovács István | Budapest | Rákóczi út 1. | Adatbázisok | 2020/21/1 |
| Kovács István | Debrecen | Kossuth tér 1. | Adatbázisok | 2020/21/1 |
| Kovács István | Budapest | Rákóczi út 1. | Hálózatok | 2020/20/2 |
| Kovács István | Debrecen | Kossuth tér 1. | Hálózatok | 2020/20/2 |
| Kovács István | Budapest | Rákóczi út 1. | Programozás | 2020/19/1 |
| Kovács István | Debrecen | Kossuth tér 1. | Programozás | 2020/19/1 |
Did you notice a pattern?
Többértékű függőség - TÉF
- Adott \(R\) reláció fölött \(X\twoheadrightarrow Y\) teljesül, ha
- bármely két sorra, melyek megegyeznek az \(X\) minden attribútumán, az \(Y\) attribútumaihoz tartozó értékek felcserélhetőek, azaz a keletkező két új sor \(R\)-beli lesz
- Lényegében \(X\) minden értéke esetén \(Y\)-hoz tartozó értékek függetlenek az \(R-X-Y\) értékeitől
- Előző példában:
oktató ↠ Város Közterület
Ez azt a mintát akarja leírni, hogy a tábla úgy néz ki, mintha önmagában kapcsolás lenne
A példában minden Budapesti sorhoz rendelve van DB, Hálózatok, meg Prog, ugyanez Debrecennel. Ezért van az, hogy a sorokat ha csak ezen attribútumokban cserélnénk, olyan, mintha nem változtattunk volna a reláción
TÉF - Példa
Alkesz(név, cím, tel, kedveltSörök)
- Az alkeszek telefonszámai függetlenek az általuk kedvelt söröktől
név ↠ telnév ↠ kedveltSörök
- Így egy-egy alkesz minden telefonszáma minden általa kedvelt sörrel kombinációban áll
- Ez a jelenség teljesen független a funkcionális függéstől
- A példában
név → címaz egyettlen FF
- A példában
- Jellemzően a TÉF-ek ki vannak téve a módosítási anomáliának
TÉF szabályok
- Minden FF TÉF
- Ha \(X\to Y\) és két sor megyegyezik \(X\)-en, akkor \(Y\)-on is
- Ott a felcserélés ugyanazt az eredményt generálja
- \(X\to Y \implies X\twoheadrightarrow Y\)
- Ha \(X\to Y\) és két sor megyegyezik \(X\)-en, akkor \(Y\)-on is
- Ha \(X\twoheadrightarrow Y\), és \(Z\) az összes többi attribútum halmaza, akkor \(X\twoheadrightarrow Z\)
- A jobb oldal az FF-ekhez hasonlóan nem bontható fel
- Azonban TÉF-eknél a jobb oldal sem bontható fel
FF és TÉF axiómák
\(R\) reláció felett, ahol \(X,Y,Z,W,S \in R\) attribútumok
FF axiómák
(A1) - Reflexitás
(A2) - Bővíthetőség
(A3) - Tranzitivitás
TÉF axiómák
(A4) - Komplementer
(A5) - Bővíthetőség
(A6) - Tranzitivitás
Vegyes axiómák
(A7): FF \(\to\) TÉF
(A8): TÉF \(\to\) FF \(\to\) FF
4NF
- A TÉF-ek okozta redundanciát BCNF nem szünteti meg
- Negyedik normálformánál a dekomponálás esetén a TÉF-eket FF-ekhez hasonlóan kezeljük, azonban a kulcsok megtalálásánál nem számítanak
Triviális TÉF-ek
\(X,Y\subseteq R\)
- \(Y\subseteq X \implies X\twoheadrightarrow Y\)
- \(X\cup Y = R \implies X \twoheadrightarrow Y\)
4NF definíció
- Egy \(R\) reláció 4NF-ben van, ha minden \(X \twoheadrightarrow Y\) nemtriviális TÉF esetén \(X\) szuperkulcs
- Tehát \(Y\not\subseteq X,\;X\cup Y\ne R\)
- A szuperkulcs definíciója változatlan, csak az FF-ektől függ
BCNF \(\subset\) 4NF
- Minden \(X\to Y\) FF egyúttal \(X\twoheadrightarrow Y\) TÉF is
- Minden olyan feltétel, ami BCNF-t sérti, sérti a negyedik normálformát is
- Viszont \(R\) ki tudja elégíteni BCNF minden feltételét a TÉF-ek megszorítása nélkül
4NF dekompozíció - Példa
Alkeszek(név, cím, tel,kedveltSörök)
FF
- \(\text{név}\to\text{cím}\)
TÉF
- \(\text{név}\twoheadrightarrow\text{tel}\)
- \(\text{név}\twoheadrightarrow\text{kedveltSörök}\)
Kulcs
- \(\{\text{név},\text{tel},\text{kedveltSörök}\}\)
Minden függőség megsérti a 4NF-t
Dekompozíció \(\text{név}\to\text{cím}\) szerint
- Alkesz1(név,cím)
- Ez 4NF-beli, egy függőséggel (
név→cím)
- Ez 4NF-beli, egy függőséggel (
- Alkesz2(név,tel,kedveltSörök)
- Nincs 4NF-ben
- A
név↠telésnév↠kedveltSörökfüggőségek teljesülnek- A három attribútum együtt kulcs (mert nincs nemtriviális FF)
Dekompozíció \(\text{név}\twoheadrightarrow\text{tel}\) vagy \(\text{név}\twoheadrightarrow\text{kedveltSörök}\) szerint
Mindkét esetben ugyanazt kapjuk
- Alkesz3(név,tel)
- Alkesz4(név,kedveltSörök)
CHASE Kiterjesztése TÉF-ekre
- FF-ek esetén ugyanúgy járjunk el, mint eddig
- Egy TÉF eseté írjuk be azokat a sorokat, melyek szükségesek ahhoz, hogy az előfordulás ne sértse meg a TÉF-et
- \(X\twoheadrightarrow Y\): ha van két sor a tablóban, melyek \(X\)-en egyeznek
- Készíthetünk két újjabb sort, megcserélve \(Y\)-on elhelyezkedő komponenseiket
- A két új sornak szerepelnie kell az új tablóban is
- \(X\twoheadrightarrow Y\): ha van két sor a tablóban, melyek \(X\)-en egyeznek
- Ha FF-ekből és TÉF-ekből szeretnénk levezetni egy \(X\twoheadrightarrow Y\)-t, akkor 2 soros tablóval kezdünk, melyek \(X\)-en megegyeznek, a többinél különböznek
- Ha észrevesszük, hogy az eredeti sorok egyikében az \(Y\) attribútumokat kicseréljük egy másik eredeti sorból ugyanazokkal, ezzel be tudtuk látni a függőséget
CHASE Setup
- Kiindulásként legyen az első sor olyan, hogy nem indexelt betűket tartalmaz \(X\)-en és \(Y\)-on, a második pedig ugyanilyeneket \(X\)-en, de az előző \(Y\) tól különböző
- A két sorban fennmaradó helyeken új, egyszer szereplő szimbólumok legyenek
- Cél: előállítani egy olyan sort, ahol minden elem indexeletlen
Tabló \(A\to C\) bizonyítása
\(A\twoheadrightarrow BC,\;D\to C\), akkor \(A\to C\) teljesül minden esetben
Cél elérni, hogy \(c_1=c_2\)
| A | B | C | D |
|---|---|---|---|
| \(a\) | \(b_1\) | \(c_1\) | \(d_1\) |
| \(a\) | \(b_2\) | \(c_2\) | \(d_2\) |
| A | B | C | D |
|---|---|---|---|
| \(a\) | \(b_1\) | \(c_1\) | \(d_1\) |
| \(a\) | \(b_2\) | \(c_2\) | \(d_2\) |
| \(a\) | \(\green{b_2}\) | \(\green{c_2}\) | \(d_1\) |
| \(a\) | \(\green{b_1}\) | \(\green{c_1}\) | \(d_2\) |
| A | B | C | D |
|---|---|---|---|
| \(a\) | \(b_1\) | \(c_1\) | \(d_1\) |
| \(a\) | \(b_2\) | \(c_{\green{1}}\) | \(d_2\) |
| \(a\) | \(b_2\) | \(c_{\green{1}}\) | \(d_1\) |
| \(a\) | \(b_1\) | \(c_1\) | \(d_2\) |
Tabló \(A\twoheadrightarrow C\) bizonyítása
\(A\twoheadrightarrow B,\;B\twoheadrightarrow C\) esetén fennáll \(A\twoheadrightarrow C\)
Ha a séma \(ABC\), akkor a komplementálási szabályból azonnal következik
TFH \(ABCD\) általánosabb séma esetén is teljesül-e
Cél: előállítani az \((a,b,c,d)\) sort
| A | B | C | D |
|---|---|---|---|
| \(a\) | \(b_1\) | \(c\) | \(d_1\) |
| \(a\) | \(b\) | \(c_1\) | \(d\) |
| A | B | C | D |
|---|---|---|---|
| \(a\) | \(b_1\) | \(c\) | \(d_1\) |
| \(a\) | \(b\) | \(c_1\) | \(d\) |
| \(a\) | \(\green{b}\) | \(\green{c_1}\) | \(d_1\) |
| \(a\) | \(\green{b_1}\) | \(\green{c}\) | \(d\) |
| A | B | C | D |
|---|---|---|---|
| \(a\) | \(b_1\) | \(c\) | \(d_1\) |
| \(a\) | \(b\) | \(c_1\) | \(d\) |
| \(a\) | \(b\) | \(c\) | \(d_1\) |
| \(a\) | \(b_1\) | \(c_1\) | \(d\) |
| \(a\) | \(\green{b}\) | \(\green{c_1}\) | \(d_1\) |
| \(\orange{a}\) | \(\orange{b}\) | \(\orange{c}\) | \(\orange{d}\) |
| \(a\) | \(\green{b_1}\) | \(\green{c_1}\) | \(d_1\) |
| \(a\) | \(\green{b_1}\) | \(\green{c}\) | \(d\) |
CHASE célok
- \(U\to V\)-nél akkor nyertünk, ha a megfelelő változók \(V\)-hez tartozó minden oszlopban egyenlőek
- \(U\twoheadrightarrow V\)-nél akor nyőztünk, ha sikerül olyan sort előállítani, ami az eredeti két sorból keletkezik \(V\) értékeinek felcserélésével