Könyvtári adatbázis
Feladatleírás:
Az előző fejezetekben leképeztük az könyvtári adatbázis egyed-kapcsolat diagramját relációs adatbázissémákká!
OLVASÓ(olvasójegy, név, lakcím, születési dátum)
KÖNYV(könyvszám, cím, kiadó, kiadás éve)
SZERZŐK(könyvszám, szerzőnév, sorszám)
KÖLCSÖNZÉSEK(könyvszám, olvasószám, kölcsönzés időpontja, visszahozta)
Határozzuk meg ezekben a relációs adatbázissémákban a funkcionális függőségeket!
Funkcionális függések meghatározása:
A funkcionális függőségek meghatározásánál nem támaszkodhatunk még az adatbázisban tárolt adatokra, csupán saját logikus gondolkodásunk alapján tudjuk vizsgálni azokat.
Vizsgáljuk meg a relációs adatbázissémákon belül az attribútumok közötti kapcsolatokat! Minden relációs adatbázissémának attribútumhalmazán belül meg kell vizsgálni a részhalmazok közötti függőségeket!
- OLVASÓ(olvasójegy, név, lakcím, születési dátum):
- {olvasójegy}: egy adott olvasójegy mellett mindig ugyanaz a név, lakcím és születési dátum fog szerepelni. Tehát az olvasójegytől függ a név, a lakcím, születési dátum.
- {név}: egy adott név mellett szerepelhetnek más olvasójegyek, lakcímek, és születési dátumok, gondoljunk csak a gyakori nevekre. Emiatt nem állíthatjuk, hogy a névtől bármely másik attribútum függne a sémában.
- {lakcím}: egy adott lakcím sem garantálja, hogy a többi attribútum valamelyikén is mindig megegyezik az ott lévő érték. Így a lakcímtől sem függ másik attribútum.
- {születési dátum}: könnyen látható, hogy egy adott születési dátum nem garantálja, hogy mellette bármely mező értéke mindig ugyanaz. Emiatt a születési dátumtól nem függ egyik attribútum sem.
- {olvasójegy, ...}: Az olvasójegyhez bármely attribútumot hozzávéve a maradék attribútumhalmaz függeni fog ettől a halmaztól, mivel az olvasójegytől is függnek.
- {név, lakcím}: ettől az attribűtumhalmaztől nem függ más attribútum, mert például apja és fia, ha ugyanott laknak, akkor a születési dátumukban és az olvasójegyben is különböznek.
- {név, születési dátum}: ritkán, de előfordulhat ugyan, hogy két ember neve és születési dátuma is megegyezik, viszont lakcímükben különbözhetnek. Emiatt ettől az attribútumhalmaztól sem függ másik attribútumhalmaz.
- {születési dátum, lakcím}: ettől az attribútumhalmaztól nem függ más attribútumhalmaz, mert ha például ikrek esetében is a nevek különböznek.
- {név, születési dátum, lakcím}: amennyiben a lakcím nem terjed ki ajtószámig, csupán a házszámig, úgy előfordulhat, hogy ugyanolyan nevű és születési dátumú személyek egy cím alatt laknak, bár ez meglehetősen ritka véletlen, de az adatmodellezés szempontjából feltételeznünk kell ezt a lehetőséget is.
- KÖNYV (könyvszám, cím, kiadó, kiadási év):
- {könyvszám}: mivel a könyvszám minden könyvpéldány esetében egyedi, így a cím, a kiadó és a kiadási év függ tőle.
- {cím}: több könyvpéldány jelenhet meg ugyanolyan címmel. Sem a könyvszám, sem a kiadó, sem pedig a kiadási év nem függ tőle.
- {kiadó}: több könyvpéldányt kiad egy kiadó, ezért a kiadótól sem függ semelyik másik attribútum.
- {kiadási év}: egy évben több könyvpéldányt kiadnak, ezért ettől sem függ semelyik másik attribútum.
- {könyvszám, ...}: ha bármely másik attribútumot hozzáveszünk a könyvszámhoz, akkor ettől a halmaztől függeni fog a fennmaradó attribútumhalmaz minden részhalmaza.
- {cím, kiadó}: ugyanaz a kiadó több évben is kiadhat egy könyvet, emiatt a kiadási év nem függ a címtől és a kiadótól. A könyvszám pedig minden könyvpéldány esetében egyedi, emiatt független a címtől és a kiadótól.
- {kiadó, kiadási év}: egy kiadó egy adott évben több könyvet is kiadhat, így sem a cím sem a könyvszám nem függ ettől az attribútumhalmaztól.
- {cím, kiadási év}: ettől az attribútumhalmaztól nem függ könyvszám, mert egy adott című könyvből több példány is lehet. A kiadó elvileg függhetne tőle, de ha belegondolunk, a tankönyvek esetében, vagy a tudományos könyvek esetében egy adott évben akár megjelenhet ugyanolyan címmel egy-egy könyv, amelyet más kiadó ad ki. Emiatt ne feltételezzük ezt a függést!
- {cím, kiadó, kiadási év}: csak a könyvszámot kell vizsgálnunk, mert nincs más kimaradt attribútum, a könyvszám viszont egyedi minden könyvpéldány esetében.
- SZERZŐK(könyvszám, szerzőnév, sorszám):
- {könyvszám}: egy adott könyvnek lehet több szerzője, így a könyvszámtól nem függ a szerzőnév. A sorszám sem függ a könyvszámtól, mert minden könyvnek van legalább egy szerzője, így az 1-es sorszám minden könyvszám mellett szerepel.
- {szerzőnév}: a sorszám nem függ a szerzőnévtől, mert ugyanaz a szerző különböző könyvek esetében más sorszámmal szerepelhet a szerzőlistában. A könyvszám sem függ a szerzőnévtől, hiszen egy kiadás esetében minden példányon ugyanott van a szerző, de a könyvszám különbözik.
- {könyvszám, szerzőnév}: ettől a halmaztól függ a sorszám.
- {könyvszám, sorszám}: ettől a halmaztól függ a szerzőnév.
- {szerzőnév, sorszám}: a könyvszám nem függ ettől a halmaztól, mert különböző könyvpéldányok esetében a könyvszám különböző.
- KÖLCSÖNZÉSEK(könyszám, olvasójegy, kölcsönzés időpontja, visszahozta):
- {könyvszám}: mivel minden kölcsönzést nyilvántartunk, egy adott könyvszám többször fog szerepelni a táblában. Emiatt mellette különböző olvasójegy, kölcsönzési időpont és visszahozási időpont értékek.
- {olvasójegy}: mivel minden olvasó több könyvet kölcsönözhet, ezért egy olvasójegy mellett megjelenhetnek különböző értékek a könyvszám, kölcsönzés időpontja és visszahozta mezőkben. Emiatt az olvasójegytől nem függ semelyik másik attribútum.
- {kölcsönzés időpontja}: egyidejűleg bárki több könyvet kivehet és nem kötelező azokat egyidőben visszahozni, így a kölcsönzés időpontjától nem függ semelyik másik attribútum sem.
- {visszahozta}: a visszahozás időpontjától sem függ semelyik másik attribútum, mert egy olvasó több könyvet hozhat vissza egyidejűleg, más olvasók is ugyanabban az időpontban visszahozhatnak könyveket, valamint különböző könyvek esetében más lehet a kölcsönzés dátuma.
- {könyvszám, olvasójegy}: sem a kölcsönzés időpontja, sem pedig a visszahozás időpontja nem függ ettől a halmaztól, mert egy személy többször is kölcsönözheti az adott könyvet.
- {könyvszám, kölcsönzés időpontja}: az olvasójegy értéke függ ettől a halmaztól, mert egy adott könyvet egy adott időpontban csak egyvalaki kölcsönözhet. Hasonlóképpen a visszahozás időpontja is függ ettől a halmaztól.
- {könyvszám, visszahozta}: az olvasójegy értéke függ ettől a halmaztól, mert csak egyvalaki hozhatja vissza az adott könyvpéldányt egy adott időpontban. A kölcsönzés időpontja is függ ettől a halmaztól, mert ez a két adat meghatározza, hogy mikor történt a kölcsönzés.
- {kölcsönzés időpontja, visszahozta}: az olvasójegy nem függ ettől a halmaztól, mert elvileg lehetséges, hogy különböző személyek kölcsönzéseit ugyanakkor rögzítsék (pl. barátok, barátnők együtt mennek a könyvtárba és különböző sorokban állva egyszerre kerülnek sorra). A könyvszám nem függ ettől a halmaztól, mert egyidejűleg több könyvet lehet kölcsönözni, amiket ugyanakkor viszünk vissza.
- {olvasójegy, kölcsönzés időpontja}: a könyvszám nem függ ettől a halmaztól, mert egyidejűleg több könyvet is lehet kölcsönözni. A visszahozás időpontja sem függ ettől a halmaztól, mert az olvasó a kölcsönzött könyveit különböző időpontokban is visszahozhatja.
- {olvasójegy, visszahozta}: a könyvszám nem függ ettől a halmaztól, mert egyidejűleg több könyvet is vissza lehet hozni. A kölcsönzés időpontja sem függ ettől a halmaztól, mert különböző időpontban kölcsönzött könyveket is vissza lehet hozni egyidejűleg.
- {könyvszám, kölcsönzés időpontja, ...}: bármi mást fűzünk emellé a két attribútum mellé, a maradék attribútumhalmaz minden részhalmaza függeni fog a halmaztól.
- {könyvszám, visszahozta, ...}: bármi mást fűzünk emellé a két attribútum mellé, a maradék attribútumhalmaz minden részhalmaza függeni fog a halmaztól.
- {olvasójegy, kölcsönzés időpontja, visszahozta}: a könyvszám nem függ ettől a halmaztól, mert egyidejűleg több könyvet is ki lehet kölcsönözni, amelyeket ugyanakkor viszünk vissza.
Kulcsok meghatározása:
Minden relációs adatbázisséma esetén meg kell határozni azt a legszűkebb attribútumhalmazt, amelynek lezártja visszaadja a séma attribútumhalmazát.