Függőségek felismerése és attribútum halmazok lezártja Elméleti összefoglaló Függőségek: mezők közötti érték kapcsolatok leírása. A Funkcionális függőség (FD=Functional Dependency): Ha R két sora megegyezik az A 1, A 2,.., An attribútumokon, akkor meg kell egyezniük más attribútumok egy B 1, B 2,, Bm sorozatán. Jelölése: A 1, A 2, An B 1, B 2, Bm Egy sémában egy B attribútum halmaz funkcionálisan függ az A-tól, ha bármely két sor, amely az A értékeiben megegyezik, szükségszerűen a B értékeiben is megegyezik. Relációk kulcsai Az egy vagy több attribútumból álló {A 1, A 2,, An } halmaz az R kulcsa, ha: 1. Ezek az attribútumok funkcionálisan meghatározzák a reláció minden más attribútumát, azaz nem lehet R-ben két olyan különböző sor, amely mindegyik A 1, A 2,, An-en megegyezne. 2. Nincs olyan valódi részhalmaza {A 1, A 2,, An} nek, amely funkcionálisan meghatározná R összes többi attribútumát, azaz a kulcsnak minimálisnak kell lennie. Attribútum halmazok lezárása: Adott egy F funkcionális függőségi halmaz F elemeiből az Armstrong axiómák alkalmazásával képezhető összes függőségi halmazt az F lezártjának nevezzük. Jele: F+. A lezárt fogalom segítségével megállapíthatjuk két eltérő elemszámú FD halmaz ekvivalenciáját. Ekvivalensek, ha FD lezártjának képzése: Kiindulunk egy adott attribútum halmazból. Többször ismételten növeljük ezt a halmazt azoknak a funkcionális függőségeknek a jobb oldali attribútumaival, amely függőségeknek a bal oldalát már tartalmazza az Szendrői Etelka 2012 1
attribútumhalmaz. Nyilvánvalóan eljutunk egy pontig, amikor a halmaz már nem bővíthető tovább, és ez az eredményhalmaz lesz a lezárás. Lépések: Az {A 1,A 2,, A n } attribútumhalmazra egy S funkcionális függőségi halmaz szerint vett lezárásának kiszámolási algoritmusa. (A szétvághatósági szabály miatt feltesszük, hogy S-ben minden függőség jobb oldala egyelemű.) 1. Legyen X attribútumhalmaz, amely végül maga a lezárt lesz. Legyen először X kezdőértéke {A 1, A 2,, A n }. 2. Ismételten keresünk olyan B 1, B 2,,B m C funkcionális függőséget S-ből, amelyre a teljes B 1, B 2, B m benne van az X attribútumhalmazban, de a C nincs. Ekkor C-t hozzávesszük az X halmazhoz. 3. A 2. lépést addig ismételjük, ameddig már nem tudunk több attribútumot hozzávenni X- hez. Mivel X csak növekedhet, és bármely relációnak véges sok attribútuma lehet, tehát S- ben is csak véges sok függőség van, végül már nem tudjuk az X-et tovább bővíteni. 4. Az az X halmaz, amelyet már nem tudunk tovább bővíteni lesz {A 1, A 2, A n } + -nak a helyes értéke. Feladatok: 1. Milyen funkcionális függőségek állnak fenn az alábbi relációs táblában? Könyvek (ISBN, Könyvcím, Kiadás éve, Kiadó neve, Kiadó címe, Szerzőkód, Szerzőnév, Szerző nemzetiség) Könyvek és szerzők között N:M kapcsolat van. Egy adott könyvet egy kiadó ad ki. Az ISBN, a Kiadó neve, és a Szerzőkód egyedi értékű azonosítók. Szerzőkód Szerzőnév, Szerző nemzetiség ISBN Könyvcím, Kiadás éve, Kiadó neve, Kiadó címe Kiadó neve Kiadó címe 2. Milyen funkcionális függőségek állnak fenn az alábbi relációs táblában? Biztosításkötések (Ügyfélkód, Ügyfélnév, Ügyfélcím, Biztosításkód, Biztosítás megnevezése, Díj, Ügyintézőkód) Az ügyfelek és a biztosítások között N:M kapcsolat van. A biztosítás díja ügyfelenként és biztosításonként változik. Az ügyintéző biztosításkötésenként más és más. Az Ügyfélkód, a Biztosításkód, az Ügyintézőkód egyedi értékű azonosítók. Ügyfélkód Ügyfélnév, Ügyfélcím Biztosításkód Biztosítás megnevezése Ügyfélkód, Biztosításkód Díj, Ügyintézőkód, Ügyintézőnév Ügyintézőkód Ügyintézőnév 3. Milyen funkcionális függőségek állnak fenn az alábbi relációs táblában? Pénzfelvétel (Bankkártya szám, Lejárat dátuma, Bankkártya típusa, Kibocsátó bank kódja, Kibocsátó bank neve, Pénzfelvétel dátuma, Pénzfelvétel időpontja, Felvett összeg) Szendrői Etelka 2012 2
Az ügyfél egy nap több időpontban is felvehet pénzt Minden bankkártyának egyetlen bank a kibocsátója A Bankkártya száma, a Kibocsátó bank kódja egyedi azonosítók. Bankkártya szám, Lejárat dátuma, Bankkártya típusa, Kibocsátó bank kódja, Kibocsátó bank neve Kibocsátó bank kódja Kibocsátó bank neve Bankkártya szám, Pénzfelvétel dátuma, Pénzfelvétel időpontja Felvett összeg 4. Milyen funkcionális függőségek állnak fenn az alábbi relációs táblában? Bérfizetés (Dolgozókód, Dolgozónév, Osztálykód, Osztálynév, Bérfizetés dátuma, Összeg) Minden dolgozó csak egy osztályon dolgozik. Bérfizetésre több különböző időpontban kerül sor, de naponta csak egyszer. A Dolgozókód, az Osztálykód egyedi értékű azonosítók. Dolgozókód Dolgozónév, Osztálykód, Osztálynév Osztálykód Osztálynév Dolgozókód, Bérfizetés dátuma Összeg Lezártak és elsődleges kulcs meghatározása 5. Feladat: A T(A,B,C,D) táblázatban az A B, D és C A funkcionális függőségek állnak fenn. Határozza meg az alábbi attribútum halmazok lezártjait! a.) {A} + b.) {C} + c.) {A,C} + Mi lesz a táblázat elsődleges kulcsa? a.) {A} + = {A, B, D} mert A B, D függőséget a szétvághatósági szabály szerint A B és A D függőségekre bontjuk és még adott C A. Kiinduló halmaz X={A}, mivel ennek a lezártját keressük. Az algoritmus második lépése szerint keresünk olyan függőséget, amelynek bal oldala benne van X-ben, de a jobb oldala nincs. Ezért bővítjük X-et először B-vel. X={A,B}. Van még egy függőség, amelynek bal oldala benne van X-ben, a jobb oldala pedig nincs. Ezért megismételve az algoritmus 2. lépését, kapjuk X={A, B, D}. Maradt még egy függőség, a C A, de ennek bal oldala nincs benne X-ben, tehát nem vihető be X-be. Tehát az algoritmus befejeződött. b.) {C} + = {C,A,B,D}, mert X={C}, mivel C A, ezért A-t bevesszük X-be. X={C, A,}, s mivel az a.) feladatban láttuk, hogy A B és A D, ezért először B-vel, majd D-vel bővítjük X-et. c.) {A,C} + ={A,C,B,D}, mert Kiinduló halmaz X={A,C}. Az előző 2 feladat alapján kapjuk az eredményt. A táblázat elsődleges kulcsa : C lesz, mivel C a legkisebb attribútumhalmaz, amelynek lezártjában az összes attribútum benne van. (b. feladat) Szendrői Etelka 2012 3
6. Feladat: Tekintsük a következő relációs táblázatot! Díjfizetés (EHAKód, Név, Évfolyam, Évfolyamfelelős tanár kódja, Évfolyamfelelős tanár neve, Dátum, Tandíjrészlet) Egy hallgató csak egy évfolyamra jár. Minden évfolyamon csak egy évfolyamfelelős tanár van, de egy tanár több évfolyamon is lehet felelős. Egy hallgató egy nap csak egy tandíjrészletet fizethet be. EHAKód Név, Évfolyam, Évfolyamfelelős tanár kódja, Évfolyamfelelős tanár neve Évfolyamfelelős tanár kódja Évfolyamfelelős tanár neve EHAKód, Dátum Tandíjrészlet Évfolyam Évfolyamfelelős tanár kódja, Évfolyamfelelős tanár neve Határozza meg az alábbi lezártakat! Mi lesz az elsődleges kulcs a relációban? {EHAKód} + {EHAKód, Dátum} + {EHAKód} + ={EHAKód, Név, Évfolyam, Évfolyamfelelős tanár kódja, Évfolyamfelelős tanár neve} {EHAKód, Dátum} + = {EHAKód, Dátum, Név, évfolyam, Évfolyamfelelős tanár kódja, Évfolyamfelelős tanár neve, Tandíjrészlet} A reláció kulcsa a EHAKód, Dátum lesz. 7. Feladat: Tekintsük a következő táblázatot! Raktározás (Raktárkód, Raktárnév, Raktárcím, Termékkód, Terméknév, Ár, Gyártókód, Gyártónév, Mennyiség) A raktárak és a termékek közötti kapcsolat N:M típusú. Egy terméket csak egy gyártó gyárt. Termékkód Terméknév, Ár, Gyártókód, Gyártónév Gyártókód Gyártónév Raktárkód Raktárnév, Raktárcím Raktárkód, Termékkód Mennyiség Határozza meg az alábbi lezártakat! {Termékkód} + {Termékkód, Raktárkód} + {Termékkód, Gyártókód} + Mi lesz az elsődleges kulcs a táblázatban? {Termékkód} + ={Termékkód, terméknév, Ár, Gyártókód, gyártónév} {Termékkód, Raktárkód} + = {Termékkód, Raktárkód, Terméknév, Ár, Gyártókód, Gyártónév, Raktárnév, Raktárcím, Mennyiség} {Termékkód, Gyártókód} + = {Termékkód, Gyártókód, Terméknév, Ár, gyártónév} Az elsődleges kulcs: Termékkód, Raktárkód. Szendrői Etelka 2012 4
8. Feladat: Tekintsük a következő táblázatot! Gépjárműadó (Rendszám, Gépkocsi súlya, Tulajdonoskód, Tulajdonosnév, Tulajdonoscím, Tulajdonrész, Adó összege) Egy autónak több tulajdonosa is lehet. Egy személynek több autóban is lehet tulajdonrésze. Az adó nagyságát a gépkocsi súlya alapján határozzák meg. Rendszám Gépkocsi súlya, Adó összege Gépkocsi súlya Adó összege Rendszám, Tulajdonoskód Tulajdonrész Tulajdonoskód Tulajdonosnév, Tulajdonoscím Határozza meg az alábbi lezártakat! {Rendszám} + {Rendszám, Tulajdonoskód} + Mi lesz az elsődleges kulcs a táblában? {Rendszám} + = {Rendszám, Gépkocsi súlya, Adó összege} {Rendszám, Tulajdonoskód} + ={Rendszám, Tulajdonoskód, Gépkocsi súlya, Adó összege, Tulajdonosnév, Tulajdonoscím, Tulajdonrész} Az elsődleges kulcs: Rendszám, Tulajdonoskód Szendrői Etelka 2012 5