6. Normalizálás 46
6.3. Relációsémák felbontása
• X(3) = {A1, A3, A4, A5, A7} és a halmaz nem bővíthető, azaz {A1}+ ={A1, A3, A4, A5, A7}.
A szuperkulcs és a funkcionális függés definíciója alapján adódik, hogy egy K ⊆A attribútumhalmaz akkor és csak akkor szuperkulcs, haK → A, vagy másként, haK+=A. Ez alapján és a fenti algoritmus segítségével már megadhatunk egy eljárást, amellyel meg tudjuk határozni egy séma kulcsát.
Legyen kezdetben K =A, ami mindig szuperkulcs, majd hagyjunk el K-ból sorra attribútumokat és ellenőrizzük, hogyK+=A még teljesül-e.
6.2.3. példa hal-maz már nem szűkíthető úgy, hogy még szuperkulcs maradna, azaz K ={A1, A2} kulcs.
Az attribútumhalmaz lezártjához hasonlóan egy függéshalmaz lezártjátis meghatározhatjuk. Egy F függéshalmaz F+ lezártján az F-ből levezethető összes függést tartalmazó halmazt értjük. AzF+egy bázisának nevezzük egy olyan részhalmazát, amelyből F valamennyi függése levezethető. Belátható, hogy F+ = {X → Y|Y ⊆ X+}. Ez alapján az F+ halmaz a következő algoritmussal határozható meg.
1. Vegyük az összes lehetséges X ⊆ A részhalmazt és határozzuk meg hozzá annak X+ lezártját.
2. Minden Y ⊆X+-ra vegyük fel az X →Y függést F+-ba.
6.3. Relációsémák felbontása
Ebben a fejezetben azt mutatjuk be, hogy hogyan bontható fel egy reláció-séma kisebb sémákra úgy, hogy a redundancia csökkenjen.
Legyen R(A) egy relációséma, és X, Y ⊂ A úgy, hogy X ∪Y = A és X∩Y 6=∅. Az R(A) séma felbontása (dekompozíciója) X és Y szerint egy
R1(X) és egy R2(X) sémát jelent. Az R séma feletti T táblát pedig az R1 feletti T1 =πX(T) és azR2 = felettiT2 =πY(T) táblákkal helyettesítjük.
Belátható, hogy tetszőleges felbontás esetén T ⊆T1 onT2. Ehhez azt kell megmutatnunk, hogy tetszőleges t ∈ T sor esetén léteznek olyan t1 ∈ T1 és t2 ∈T2 sorok, hogyt1 és t2 összekapcsolásával éppen a t sort kapjuk. Ennek azonban éppen megfelel az a t1 ∈T1 sor, amit a t ∈T sorπX projekciójával kapunk, valamint az at2 ∈T2sor, amit at ∈T sorπY projekciójával kapunk.
Ekkor ugyanist(X) =t1(X) és t(Y) =t2(Y), továbbá X∩Y 6=∅ miatt a t1 ést2 sorok összekapcsolhatók, éppen a t∈T sort eredményezve.
Egy felbontást hűségesnek nevezünk, ha T ⊇ T1 on T2 is teljesül, azaz T =T1 onT2.
6.3.1. példa
A FÓRUM_KÖVETÉSE tábla esetében az
X ={felhasználónév,email,név,hírfolyam azonosító}, Y ={hírfolyam azonosító,megnevezés}
mentén vett felbontás hűséges. Az alábbi táblákat eredményezi, melyek természetes összekapcsolásával valóban éppen aFÓRUM_KÖVETÉSE táblát kapjuk:
Y ={email,név,hírfolyam azonosító,megnevezés}
mentén vett felbontás nem hűséges, hiszen az alábbi táblákat eredmé-nyezi:
6.3. RELÁCIÓSÉMÁK FELBONTÁSA 53
pbalazs@inf.u-szeged.hu Balázs Péter 1 Adatbázis kérdések
pbalazs@inf.u-szeged.hu Balázs Péter 2 PHP hírek
pbalazs@inf.u-szeged.hu Balázs Péter 4 Milyen gépet vegyek
pkardos@inf.u-szeged.hu Kardos Péter 2 PHP hírek
pkardos@inf.u-szeged.hu Kardos Péter 3 Ki a legjobb tanár gnemeth@inf.u-szeged.hu Németh Gábor 1 Adatbázis kérdések
gnemeth@inf.u-szeged.hu Németh Gábor 2 PHP hírek
gnemeth@inf.u-szeged.hu Németh Gábor 3 Ki a legjobb tanár bodnaar@inf.u-szeged.hu Bodnár Péter 4 Milyen gépet vegyek
Ezek összekapcsolása pedig egy, az eredetinél bővebb táblát eredmé-nyez.
T1noT2
felh. név email név hírfolyam azonosító megnevezés
pbalazs pbalazs@inf.u-szeged.hu Balázs Péter 1 Adatbázis kérdések gnemeth pbalazs@inf.u-szeged.hu Balázs Péter 1 Adatbázis kérdések
pbalazs pbalazs@inf.u-szeged.hu Balázs Péter 2 PHP hírek
pkardos pbalazs@inf.u-szeged.hu Balázs Péter 2 PHP hírek
gnemeth pbalazs@inf.u-szeged.hu Balázs Péter 2 PHP hírek
pbalazs pbalazs@inf.u-szeged.hu Balázs Péter 4 Milyen gépet vegyek bodnaar pbalazs@inf.u-szeged.hu Balázs Péter 4 Milyen gépet vegyek
pkardos pkardos@inf.u-szeged.hu Kardos Péter 2 PHP hírek
pbalazs pkardos@inf.u-szeged.hu Kardos Péter 2 PHP hírek
gnemeth pkardos@inf.u-szeged.hu Kardos Péter 2 PHP hírek
pkardos pkardos@inf.u-szeged.hu Kardos Péter 3 Ki a legjobb tanár gnemeth pkardos@inf.u-szeged.hu Kardos Péter 3 Ki a legjobb tanár gnemeth gnemeth@inf.u-szeged.hu Németh Gábor 1 Adatbázis kérdések pbalazs gnemeth@inf.u-szeged.hu Németh Gábor 1 Adatbázis kérdések
gnemeth gnemeth@inf.u-szeged.hu Németh Gábor 2 PHP hírek
pbalazs gnemeth@inf.u-szeged.hu Németh Gábor 2 PHP hírek
pkardos gnemeth@inf.u-szeged.hu Németh Gábor 2 PHP hírek
gnemeth gnemeth@inf.u-szeged.hu Németh Gábor 3 Ki a legjobb tanár pkardos gnemeth@inf.u-szeged.hu Németh Gábor 3 Ki a legjobb tanár bodnaar bodnaar@inf.u-szeged.hu Bodnár Péter 4 Milyen gépet vegyek pbalazs bodnaar@inf.u-szeged.hu Bodnár Péter 4 Milyen gépet vegyek
Ha a felbontás nem hűséges, akkor a kisebb táblák természetes összekap-csolásával általában nem állítható vissza az eredeti tábla. Ilyenkor új, az eredeti táblában nem szereplő (általában értelmetlen) sorok is keletkeznek, ami azt jelenti, hogy információt veszítünk a dekompozíció során. A célunk ezért az, hogy minden esetben hűséges felbontást alkalmazzunk. A következő tétel arra szolgáltat elegendő feltételt, hogy egy felbontás hűséges legyen.
6.3.1. tétel : Heath tétele
LegyenR(A) egy relációséma ésA=B∪C∪DazAattribútumhalmaz egy diszjunkt felbontása (azaz B∩C =∅, C∩D =∅ és B ∩D =∅).
Ha C →D, akkor azR1(B ∪C), R2(C∪D) felbontás hűséges.
Bizonyítás. LegyenT egy tetszőlegesRfeletti tábla ésT1 valamintT2 a szétbontás során kapottR1 valamintR2 feletti táblák. AT ⊆T1 onT2 a korábbiak alapján nyilvánvaló. Azt kell tehát bizonyítanunk, hogy T1 on T2 ⊆ T. Legyen t ∈ T1 on T2 egy tetszőleges sor. Ez egy T1 -beli és egy T2-beli sor összekapcsolásával állt elő, így kell, hogy legyen olyan t1 ∈ T1 és olyan t2 ∈ T2 sor, hogy t1(C) = t2(C). A T1 és T2 táblák viszont a T tábla projekciójaként adódtak (T1 = πB∪C(T) és T2 =πC∪D(T)), tehát létezik egy olyan u1 ∈T sor, melyreu1(B∪C) = t1(B ∪C), továbbá létezik egy olyan u2 ∈ T sor, melyre u2(C∪D) = t2(B∪C) . Mivelt1(C) = t2(C), ígyu1(C) =u2(C) is fennáll, de akkor aC →D miatt u1(D) =u2(D) is teljesül. Tehát u1 =t, azaz t∈T.
6.3.2. példa
A FÓRUM_KÖVETÉSE tábla esetében a korábban már vizsgált X ={felhasználónév, email, név, hírfolyam azonosító}
Y ={hírfolyam azonosító, megnevezés}
mentén vett felbontás Heath-tétele szerint hűséges a B = {felhasználónév, email, név}, C = {hírfolyam azonosító}, D = {hírfolyam azonosító, megnevezés} választással.
Ha a függőségeket is figyelembe vesszük, akkor egy R(A, F) relációsé-ma felbontása X és Y szerint olyan R1(X, F1) és R2(Y, F2) sémákat jelent, aholF1 úgy választandó, hogyF1+ azF+azon részhalmazával egyezzen meg, amely csakX-beli attribútumokat tartalmaz,F2pedig úgy választandó, hogy F2+ az F+ azon részhalmazával egyezzen meg, amely csak Y-beli attribútu-mokat tartalmaz. Egy felbontást függőségőrzőnek nevezünk, ha F1 ∪F2 az F egy bázisát adják. Belátható, hogy egy hűséges felbontás nem feltétlenül függőségőrző.