Adatbázisok I.
4 Gyakorlat
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 A1, A2, ….., An attribútumokon, akkor meg kell egyezniük más attribútumok egy B1, B2, …, Bm sorozatán. Jelölése: A1, A2, … An → B1, B2, … 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ó {A1, A2, …, 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 A1, A2, …, An-en megegyezne. 2. Nincs olyan valódi részhalmaza {A1, A2, …, 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
Adatbázisok I.
4 Gyakorlat
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 {A1,A2, …, An} 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 {A1, A2, …, An}. 2. Ismételten keresünk olyan B1, B2,…,Bm → C funkcionális függőséget S-ből, amelyre a teljes B1, B2,…Bm 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 Xhez. Mivel X csak növekedhet, és bármely relációnak véges sok attribútuma lehet, tehát Sben 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 {A1, A2, … An}+ -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) További tudnivalók: 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. Megoldás: 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) További tudnivalók: 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. Megoldás: Ü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
Adatbázisok I.
4 Gyakorlat
További tudnivalók: 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. Megoldás: 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) További tudnivalók: 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. Megoldás: 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? Megoldás: 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
Adatbázisok I.
4 Gyakorlat
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. A táblázatban a következő funkcionális függőségek állnak fenn: 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}+ Megoldás: {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. A táblázatban a következő funkcionális függőségek állnak fenn: 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? Megoldás: {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
Adatbázisok I. 8. Feladat: Tekintsük a következő táblázatot! Gépjárműadó (Rendszám, Gépkocsi Tulajdonrész, Adó összege)
4 Gyakorlat
súlya,
Tulajdonoskód,
Tulajdonosnév,
Tulajdonoscím,
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. A táblázatban a következő funkcionális függőségek állnak fenn: 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? Megoldás: {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