Egyed/kapcsolat modell Adatbázis-kezelés
Egyed-kapcsolat modell Grafikus ábrázolási mód, amellyel egy-egy adatbázis sémája megtervezhető. Az ábra aztán könnyen átalakítható relációs adatmodellé.
Egyedek I. Az egyedosztály szerepe nagyon hasonló az objektum-orientált nyelvekben használatos osztályok szerepéhez. Az egyedek az egyes objektumoknak felelnek meg. Példa a jelölésre: név színész kor
Egyedek II. E(A1,…, An) egyedosztály séma ahol: E az egyedosztály neve, A1,…, An az attribútumok (tulajdonságok), dom(Ai) a lehetséges értékek halmaza, a legegyszerűbb esetben csak atomi értékek kerülhetnek szóba. E(A1,…, An) egyedosztály séma egy előfordulása: E = {e1,…, em} egyedek (entitások) halmaza, ahol: ei(k) dom(Ak), semelyik két egyed sem egyezik meg minden attribútumán.
Kapcsolatok I. A kapcsolatok tehát tulajdonképpen egyedosztályok előfordulásai közötti relációk. A kapcsolatokat rombusz jelöli. A kapcsolatokhoz is tartozhatnak attribútumok. gázsi Cím év név szerepel színész film kor hossz
Kapcsolatok II. K(E1, …, Ek, A1, …, Am) egy kapcsolat sémája, ahol: K a kapcsolat neve, E1,…, Ek egyedosztályok sémái, A1, …, Am a kapcsolathoz tartozó attribútumok. Ha k = 2, bináris kapcsolatról, p > 2 esetén többágú kapcsolatról beszélünk. K(E1,…, Ek) sémájú kapcsolat egy előfordulása K = {(e1,…, ek) | ei Ei }.
Kapcsolatok fajtái I. Sok-sok kapcsolat (N:N). Minden E1-beli egyedhez E2-beli egyedek egy halmazát rendelhetjük hozzá és fordítva. Példa: Cím év név [1,n] szerepel [1,n] színész film kor hossz
Kapcsolatok fajtái II. Sok-egy kapcsolat (N:1). Egy E1-beli egyedhez több E2-beli egyed tartozhat, egy E2-beli egyedhez azonban legfeljebb egy E1-beli. Példa: Cím év név [1,n] gyárt [0,1] stúdió film cím hossz
Kapcsolatok fajtái III. Egy-egy kapcsolat (1:1). Egy E1-beli elemhez legfeljebb egy E2-beli elem tartozhat és fordítva. Példa: név kor név [0,1] vezet [0,1] stúdió elnök cím fizetés
„Különlegességek” I. Példa többágú kapcsolatra: [1,n] szerződés [1,n] színész film [1,n] stúdió
„Különlegességek” II. Általánosított egy-sok többágú kapcsolat. A K(E1,…, Ek) sémájú kapcsolatnak nem szerepelhetnek egyszerre (e1, e2,…, ek), (e’1, e2,…, ek) elemei úgy, hogy e1 és e’1 különböznek egymástól. Példa: fizetés [0,1] [1,n] szerződés [1,n] színész film [1,n] stúdió
„Különlegességek” III. Egy egyedhalmaz többször is szerepel egy kapcsolatban. Példa: eredeti folytatás részek száma film folytatás
Alegyedek I. Egy alegyed ősének minden kapcsolatát, attribútumát örökli. Példa: cím év hossz film színész az egy hang az egy fegyver rajzfilm bűnügyi film
Alegyedek II. Az az-egy (isa) kapcsolatokat öröklődési kapcsolatnak is nevezik. Az öröklődési struktúra fát kell, hogy alkosson egyetlen gyökérelemmel. Az e egyed komponensekből épül fel, a komponensek az öröklési struktúra egyedosztályainak elemei. Ha egy e egyednek van egy E egyedhalmazhoz tartozó c komponense és a fában az E szülője az F egyedhalmaz, akkor e-nek kell legyen egy d komponense is az F egyedhalmazban. Továbbá a c-d párnak szerepelnie kell az E-t F-fel összekötő öröklési kapcsolatban. Az e egyed attribútumait a komponensek attribútumainak összessége alkotja, és e részt vesz mindazokban a kapcsolatokban, melyekben valamely komponense részt vesz.
Gyenge egyedhalmazok Előfordulhat, hogy egy-egy egyedhalmazt csak más egyedhalmazok attribútumainak ismeretében azonosíthatunk egyértelműen. Ezeket gyenge egyedhalmazoknak nevezzük. A gyenge egyedhalmaz az „azonosító” egyedhalmazokhoz egy-sok kapcsolattal kapcsolódhat. Példa: név csoport stúdió tag szám cím elnök
Megszorítások (kulcsok) I. Az E(A1,…, An) egyedosztály séma esetén az Ai1,…, Aij attribútumhalmaz szuperkulcs, ha abból, hogy tetszőleges ek, es egyedek megegyeznek a fenti attribútumokon, következik, hogy a többi attribútumon is megegyeznek, vagyis a két egyed ugyanaz (k = s). A korábbi definíció értelmében az A1,…, An attribútumhalmaz minden esetben szuperkulcs. A fenti Ai1,…, Aij attribútumhalmaz kulcs, ha bárhogy hagyunk is el egy attribútumot, a maradék attribútumhalmaz már nem lesz szuperkulcs. Más szóval: a minimális szuperkulcsok, kulcsok.
Megszorítások (kulcsok) II. Egy-egy egyedosztály sémához nem csupán egy kulcs tartozhat. Ezek közül általában ki kell választanunk egyet, ez lesz az elsődleges kulcs. A többi kulcsot megjegyzésként szerepeltethetjük az ábra mellett. A különböző adatbázisrendszerekben az elsődleges kulcs megválasztása kihatással lehet a reláció tárolására, a tábla a kulcs attribútumai szerint rendezetten tárolódhat.
Gyenge egyedhalmazok kulcsa I. Egy F gyenge egyedhalmaz kulcsa azokból az egyedhalmazokból származhat, amelyekhez kapcsolódik. Legyen egy ilyen E. Ekkor: E kulcsának attribútumai benne vannak F kulcsában is. Ha E maga is gyenge egyedhalmaz, akkor ezek az attribútumok legalább egy harmadik egyedhalmazból is származnak. Ha több sok-egy kapcsolat szerepel E és F között, akkor mindegyik kapcsolat segíthet F kulcsának kialakításában.
Gyenge egyedhalmazok kulcsa II. név név törzs apa maiak tag nagyapa ősök név Itt az ősök egyedosztály kulcsa a törzsnév és a név. A maiak egyedosztályé pedig a nagyapa törzsnév, nagyapa név, apa törzsnév, apa név.
Megszorítások (kulcsok) III. Az elsődleges kulcsokat aláhúzással jelölik. Példa: Cím év név [1,n] szerepel [1,n] színész film kor hossz
Egyéb megszorítások I. Attribútumok értéke lehet ismeretlen (NULL) vagy sem. Hivatkozási épség megszorítás. Megkövetelik, hogy a hivatkozott érték szerepeljen az adatbázisban, vagyis nem fordulhat elő például, hogy egy stúdiónak ne legyen elnöke. Egyéb megszorítások. Például: egy-egy filmben legalább három színésznek kell szerepelnie. Az utóbbi két megszorítás a [1,n] segítségével megadható. Alternatív jelölésforma szerepel az Adatbázisrendszerek alapvetés című könyvben.
Egyéb megszorítások II. Példa hivatkozási épség megszorításra: név kor név [1,1] vezet [0,1] stúdió elnök cím fizetés
Tervezési alapelvek I. A modell minél pontosabban tükrözze a valóságot. Attribútum vs. új egyedosztály? Általában: ha az ábrázolni kívánt „valóságdarab” több, számunkra fontos tulajdonsággal rendelkezik, akkor érdemes egy új egyedosztályt készíteni, különben elegendő felvenni egy új attribútumot. Példa: Film egyedosztálynál a színésznév új attribútumként szerepeljen vagy inkább hozzunk létre egy új egyedosztályt. A kettőt egyszerre semmi esetre se tegyük.
Tervezési alapelvek II. Film (cím, év, hossz, stúdió, színész) relációséma esetén, ha egy filmben több színész is szerepel, akkor a többi attribútum értéke feleslegesen ismétlődik (redundancia). Ez az adatok módosításánál is problémát jelenthet a fölöslegesen elhasznált memória mellett (módosítási anomália). További problémát jelenthet, hogy esetenként egy másik táblában egy színész törlése azokat a sorokat is törli a Film relációban, ahol ez a színész szerepel. Ha ez az egyetlen sora egy filmnek, az összes információ elvész (törlési anomália). A működő adatbázisoknál felmerülő problémák megközelítőleg 70%-a tervezésbeli hiányosságokra vezethető vissza.
Feladatok I. Orvosi adatbázist készítünk. Minden embernél számontartjuk a nevét, korát, TAJ számát. Ezen utóbbi alapján egyértelműen azonosítani lehet bárkit. Az orvosoknál tároljuk ezeken kívül még a tudományos fokozatukat és a szakterületüket, a körzeti orvosoknál még annak a városnak a nevét is, ahol rendelnek, a pácienseknél pedig a foglalkozásukat. A betegségeknél számontartjuk a nevüket és azt, hogy átlagosan mennyi ideig tart a gyógyulási folyamat. Minden betegséget valamilyen bacilustörzs okoz. Ezek a nevük alapján egyértelműek, emellett tároljuk az elterjedtségük arányát. A törzsekhez bacilusok tartoznak, ám a név alapján még nem tudhatjuk pontosan melyik bacilusról van szó, mert több törzshöz is tartozhat ugyanolyan nevű bacilus. A különféle betegségekben szenvedő pácienseknek lehet, hogy egyszerre több orvos írja majd fel a különféle árú gyógyszereket. A gyógyszereknél tároljuk a nevüket, és hogy mely bacilusok esetében hatásosak. Minden páciensnek tartoznia kell egy körzeti orvoshoz, s valaki csak úgy lehet körzeti orvos, ha legalább húsz páciense van.
név kor TAJ ember foglalkozás a.e. a.e. név orvos [1,n] [1,n] páciens betegség lefutás [1,1] szakt. a. e. okoz felír tud. fok. név bac. törzs körzeti o. [20,n] elterjedt tag város tartozik [1,n] gyógyszer bacilus név név ár hat
E-K modell átírása adatbázissémává Egy egyedhalmaznak egy reláció felel meg, melynek neve megegyezik az egyedhalmaz nevével, attribútumai az egyedhalmaz attribútumai. Egy kapcsolatnak szintén egy relációt feleltetünk meg, melynek neve a kapcsolat neve, attribútumai pedig a kapcsolatban részt vevő egyedhalmazok kulcsai. Amennyiben két attribútum neve megegyezne, egyiket értelemszerűen át kell neveznünk. Gyenge egyedhalmazok esetében a kapott relációhoz hozzá kell még venni azokat az attribútumokat, amelyek egyértelműen azonosítják az egyedhalmazt.
Alegyedek átírása relációkká E/K megközelítés: az alegyed esetében a megfelelő relációban a saját attribútumokhoz hozzávesszük az ősegyed kulcsát. Objektum-orientált megközelítés: felsoroljuk a hierarchia összes lehetséges részfáját, s ezek mindegyikére létrehozunk egy-egy relációt, amely azon egyedeket reprezentálja, amelyeknek pontosan az adott részfában vannak komponensei. A reláció sémája az összes, a részfában szereplő egyed komponenseit tartalmazza. Erre objektumorientált megközelítésként hivatkozunk, mivel az a feltevés motiválta, hogy az egyedek egy és csak egy osztályhoz tartozó „objektumok” legyenek. NULL értékek használata: ha megengedjük a relációkban a NULL érték használatát, akkor az egyedhalmazok teljes hierarchiáját egyetlen egyszerű reláció segítségével ábrázolhatjuk. Ez a reláció minden attribútumot tartalmaz. Egy egyedet pedig egy sorral ábrázolunk. Ennek a sornak azon értékei, amelyek nem definiáltak az adott egyedre, NULL értéket vesznek fel.
A szabályok alapján kapott adatbázis- séma Ember (név, kor, TAJ) Orvos (TAJ, szakt., tud.fok) Körzeti orvos (TAJ, szakt., tud_fok ,város) Páciens (TAJ, foglalkozás) Gyógyszer (név, ár) Betegség (név, lefutás) Bacilus törzs (név, elterjedtség) Bacilus (név, törzs_név) Felír (orvos_TAJ, páciens_TAJ, gy_név, betegség_név) Tartozik (orvos_TAJ, páciens_TAJ) Hatásos (gy_név, bac_név, törzs_név) Okoz (bet_név, törzs_név)
Megjegyzések I. Sok-egy kapcsolat esetén az „egy ághoz” tartozó elsődleges kulcs a kapcsolatból kapott relációnak is kulcsa lesz. Egy-egy kapcsolat esetén ez mindkét relációra elmondható. A kapott adatbázis-séma egyszerűsíthető: E1(A1,…, An, B1,…, Bk), E2(B1,…, Bk, C1,…, Cs) egyedosztályok, ahol B1,…, Bk az E2 egyedosztály (szuper)kulcsa, E3(A1,…, An, B1,…, Bk, C1,…, Cs) egyedosztály készíthető. Itt B1,…, Bk az E1 egyedosztály idegen (szuper)kulcsa. Példa: Páciens (TAJ, foglalkozás), Tartozik (orvos_TAJ, páciens_TAJ) ebből: Páciens (TAJ, foglalkozás, orvos_TAJ). Sok-sok kapcsolat esetén is érdemes elgondolkodni a az összevonáson
Megjegyzések II. Sok-sok kapcsolat esetén is érdemes elgondolkodni az összevonáson. Pl., ha a Hatásos (gy_név, bac_név, törzs_név) kapcsolatban minden gyógyszer legfeljebb két bacilus ellen hatásos, akkor az előbbi Hatásos reláció és a Gyógyszer (név, ár) táblák összevonhatók a Gyógyszer (név, ár, bac_név, törzs_név) táblává, hiszen ez még nem okoz „túlzottan nagy” redundanciát.
Egyszerűsítés Ember (név, kor, TAJ) Körzeti orvos (TAJ, szakt., tud.fok ,város) Páciens (TAJ, foglalkozás, orvos_TAJ) Gyógyszer (ár, név) Betegség (név, lefutás, törzs_név) Bacilus törzs (név, elterjedtség) Bacilus (név, törzs_név,gy_név) (esetleg) Felír (orvos_TAJ, páciens_TAJ, gy_név, betegség_név)
Feladatok I. A középkor nagy kalóztámadásairól szeretnénk adatbázist készíteni. A csatákban kalóz- és szállítóhajók illetve katonai hajók vettek részt. Minden hajónál számontartjuk annak nevét, típusát és súlyát. A katonai hajóknál feljegyezzük még ezen kívül az ágyúk számát, a szállítóhajóknál pedig megadjuk a rakományuk jellemzőit, azaz a rakomány értékét, mennyiségét, származási helyét és azonosítóját. Egy szállítóhajónak mindig van rakománya. Egy-egy csatában legalább 5 hajó vett részt. Egy katonai hajó legalább háromszor, egy kalózhajó legalább kétszer csatázott. Minden csatánál számontartjuk még a nevét, dátumát, helyszínét, a győztes ország nevét és az elsüllyedt hajók neveit. Minden hajóhoz legalább tíz fős legénység tartozott: legalább kilenc matróz és pontosan egy kapitány. A legénység minden tagjánál számontartjuk a nevét és a szolgálati idejét, a kapitányoknál ezenfelül még a fizetésüket is, a matrózoknál pedig a beosztásukat.
Feladatok II. fogl. id Anya id id Születés Orvos Gyermek kórház Nővér kórház id Milyen kardinalitásokat kell a kapcsolatokhoz írnunk, hogy a következőket fejezzük ki? Minden gyermeknek pontosan egy anyja van. Egy gyerek, nővér, orvos hármashoz pontosan egy anya tartozik. Egy adott gyermek és anya kombinációhoz pontosan egy orvos tartozik. 2. A (b) esethez adjuk meg a hozzátartozó adatbázissémát.
Feladatok III. Születések Gyerek Anya Orvos Nővér 3. (a) Írjuk be a kardinalitásokat úgy, hogy minden gyermekhez pontosan egy születés tartozzon, és minden születéshez pontosan egy gyermek. (b) Minden születéshez pontosan egy anya és orvos tartozzon. (c) Adjuk meg az ábrához tartozó relációs adatbázissémát.
Feladat IV. 4. Adjuk meg az ábrához tartozó relációs adatbázissémát. név név törzs apa maiak tag nagyapa ősök név 4. Adjuk meg az ábrához tartozó relációs adatbázissémát.