• Nem Talált Eredményt

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 KA attribútumhalmaz akkor és csak akkor szuperkulcs, haKA, 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 XA részhalmazt és határozzuk meg hozzá annak X+ lezártját.

2. Minden YX+-ra vegyük fel az XY 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, YA úgy, hogy XY = A és XY 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 TT1 onT2. Ehhez azt kell megmutatnunk, hogy tetszőleges tT sor esetén léteznek olyan t1T1 és t2T2 sorok, hogyt1 és t2 összekapcsolásával éppen a t sort kapjuk. Ennek azonban éppen megfelel az a t1T1 sor, amit a tT sorπX projekciójával kapunk, valamint az at2T2sor, amit atT sorπY projekciójával kapunk.

Ekkor ugyanist(X) =t1(X) és t(Y) =t2(Y), továbbá XY 6=∅ miatt a t1 ést2 sorok összekapcsolhatók, éppen a tT sort eredményezve.

Egy felbontást hűségesnek nevezünk, ha TT1 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=BC∪DazAattribútumhalmaz egy diszjunkt felbontása (azaz BC =∅, CD =∅ és BD =∅).

Ha CD, 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. ATT1 onT2 a korábbiak alapján nyilvánvaló. Azt kell tehát bizonyítanunk, hogy T1 on T2T. Legyen tT1 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 t1T1 és olyan t2T2 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 u1T sor, melyreu1(B∪C) = t1(B ∪C), továbbá létezik egy olyan u2T sor, melyre u2(C∪D) = t2(B∪C) . Mivelt1(C) = t2(C), ígyu1(C) =u2(C) is fennáll, de akkor aCD miatt u1(D) =u2(D) is teljesül. Tehát u1 =t, azaz tT.

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 F1F2 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ő.