E/K diagram átírása relációkra Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009
4.5. E/K diagram átírása relációs modellé 4.6. Osztályhierarchia átalakítása relációkká A Tankönyvbıl nem szerepel a tananyagban: UML, ODL 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
1
Egy könyvtár adatmodellje
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
2
Példa-1:
KÖNYV (könyvszám, szerzı, cím) OLVASÓ (olvasószám, név, lakcím) KÖLCSÖN (könyvszám, olvasószám, kivétel, visszahozás) 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
3
Összetett attribútumok leképezése
Tegyük fel, hogy az OLVASÓ táblában a lakcím attribútumot (helység, utca, házszám) struktúraként szeretnénk kezelni. Relációs adatmodellben erre egyetlen lehetıség van: az OLVASÓ (olvasószám, név, lakcím) séma helyett a OLVASÓ (olvasószám, név, helység, utca, házszám) sémára térünk át.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
4
Többértékő attribútumok leképezése ---1
Kérdés, hogy többszerzıs könyveket hogyan tartsunk nyilván az adatbázisban. 1. Megadás egyértékő attribútumként. A szerzı megadására szolgáló szövegmezıben felsoroljuk a szerzıket.
Hátrányok: – a szerzıket külön-külön nem tudjuk kezelni. – sok szerzı esetleg nem fér el a megadott mezıben
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
5
Többértékő attribútumok leképezése --- 2 2. Megadás többértékő attribútumként. a) Sorok többszörözése. A KÖNYV táblában egy könyvhöz annyi sort veszünk fel, ahány szerzıje van: Könyvszám Szerzı Cím 1121 Ullman Adatbázisok 1121 Widom Adatbázisok 3655 Radó Világatlasz 2276 Karinthy Így írtok ti 1782 Jókai Aranyember A megfelelı relációséma: KÖNYV (könyvszám, szerzı, cím) A fenti megoldás hátránya, hogy a többszerzıs könyvek címét több példányban kell megadni, ami redundanciát jelent.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
6
Többértékő attribútumok leképezése --- 3 2. Megadás többértékő attribútumként. b) új tábla felvétele. A KÖNYV (könyvszám, szerzı, cím) sémát az alábbi két sémával helyettesítjük: KÖNYV (könyvszám, cím) SZERZİ (könyvszám, szerzı)
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
7
Többértékő attribútumok leképezése --- 4 2. Megadás többértékő attribútumként. c) Sorszámozás. Ha a szerzık sorrendje nem közömbös, akkor a SZERZİ táblát egy sorszám mezıvel kell bıvíteni (emlékeztetünk rá, hogy a relációs adatmodell nem definiálja a rekordok sorrendjét): KÖNYV (könyvszám, cím) SZERZİ (könyvszám, sorszám, szerzı) 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
8
Kapcsolatok leképezése 1. változat: Ha egy olvasónak egyszerre csak egy könyvet adnak ki, akkor a kölcsönzés 1:1 kapcsolatot jelent. Ilyenkor a KÖLCSÖN sémában a könyvszám és az olvasószám egyaránt kulcs. Továbbá, a visszahozás attribútumra nincs szükségünk, mivel a könyv visszahozásával a könyv-olvasó kapcsolat megszőnik. Tehát, a KÖLCSÖN (könyvszám, olvasószám, kivétel) vagy a KÖLCSÖN (könyvszám, olvasószám, kivétel) sémát vehetjük fel a kapcsolathoz. A KÖLCSÖN sémát az azonos kulcsú sémába olvasztva a KÖNYV (könyvszám, szerzı, cím, olvasószám, kivétel) OLVASÓ (olvasószám, név, lakcím) vagy a KÖNYV (könyvszám, szerzı, cím) OLVASÓ (olvasószám, név, lakcím, könyvszám, kivétel) adatbázissémákat kapjuk. 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
9
Kapcsolatok leképezése 2. változat: Ha egy olvasó több könyvet is kikölcsönözhet, akkor a könyv-olvasó kapcsolat N:1 típusú. Ekkor a KÖLCSÖN sémában csak a könyvszám lehet kulcs, ezért a KÖLCSÖN sémát csak a KÖNYV sémába olvaszthatjuk: KÖNYV (könyvszám, szerzı, cím, olvasószám, kivétel) OLVASÓ (olvasószám, név, lakcím)
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
10
Kapcsolatok leképezése 3. változat: Ha az egyes könyvek korábbi kölcsönzéseit is nyilvántartjuk, akkor nem csak egy olvasóhoz tartozhat több könyv, hanem egy könyvhöz is több olvasó (N:M kapcsolat), sıt adott olvasó adott könyvet egymás után többször is kikölcsönözhet. Ezért a KÖLCSÖN sémában {könyvszám, kivétel} vagy {könyvszám, visszahozás} a kulcs, a KÖLCSÖN táblát most sem a KÖNYV, sem az OLVASÓ táblába nem tudjuk beolvasztani. Az adatbázisséma ezért a következı: KÖNYV (könyvszám, szerzı, cím) OLVASÓ (olvasószám, név, lakcím) KÖLCSÖN (könyvszám, olvasószám, kivétel, visszahozás) 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
11
Példa-2: E/K diagramra, leképezésre relációkra
Modellezzük egy áruháznak, dolgozóinak, vevıinek és beszállítóinak rendszerét! Feltételezések:
az áruház minden osztályát legfeljebb egy ember vezeti, minden dolgozó legfeljebb egy osztályon dolgozik, az áruházak osztályai felelısek az áruk beszerzéséért, minden szállító legfeljebb egyféle áron szállít egy árut, egy rendelést legfeljebb egy vevıhöz tartozhat, minden rendelésen egy cikkhez legfeljebb egy rendelt mennyiség tartozhat.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
12
dolgozó dnév
az egy
fınök szállító
fizetés
snév vezet
dolgozik
onév
szállít beszerez
osztály
scím
oszám
ár
cikk cnév
tartalmaz
cszám
mennyi
rendelés felad rszám
vásárló
dátum vnév
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
vcím
egyenleg 13
E/K diagram átírása relációs adatbázistervre Mi minek felel meg:
egyedhalmaz séma E(A1,…,An) tulajdonságok (szuper)kulcs egyedhalmaz elıfordulása e egyed R(E1,…Ep,A1,…,Aq) kapcsolati séma, ahol Ei egyedhalmaz, Aj saját tulajdonság
relációséma E(A1,…,An) attribútumok (szuper)kulcs
E/K modell
Relációs adatmodell
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
reláció (e(A1),…,e(An)) sor R(K1,…,Kp,A1,…,Aq) relációséma, ahol Ki az Ei (szuper)kulcsa
14
E/K diagram átírása relációs adatbázistervre
A transzformálás elıtt a tulajdonságokat átnevezhetjük, hogy a relációsémában ne szerepeljen kétszer ugyanaz az attribútum. Az az_egy kapcsolat esetén a speciális osztály saját attribútumaihoz hozzávesszük az általános osztály (szuper)kulcsát. Ha R(E1,E2) sok-egy kapcsolat, akkor R(K1,K2) relációsémának a K1 szuperkulcsa lesz. A gyenge entitás relációsémáját bıvíteni kell a meghatározó kapcsolat(ok)ban szereplı egyed(ek) kulcsával.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
15
Az Áruház diagram átalakítása adatbázistervvé Az egyedosztályok átalakítása: dolgozó(dnév, fizetés) fönök(dnév) osztály(onév,oszám) szállító(snév,scím) cikk(cnév,cszám) rendelés(rszám,dátum) vásárló(vnév,vcím,egyenleg) A kapcsolatok átalakítása: dolgozik(dnév,oszám) Összesen 13 relációsémát kaptunk! vezet(dnév,oszám) beszerez(cszám,oszám) szállít(cszám,sznév,ár) tartalmaz(rszám,cszám,mennyi) felad(rszám,vnév) 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
16
Összevonások
Két relációsémát összevonhatunk, ha az egyikben van idegen (szuper)kulcs a másikra nézve. E1(A1,…,An,B1,…,Bm) és E2(B1,…,Bm,C1,…,Cp) helyett E3(A1,…,An,B1,…,Bm,C1,…,Cp) relációsémát vehetjük, ha B1,…,Bm az E2 elsıdleges, vagy másodlagos (szuper)kulcsa. Az összevonás eredményét felhasználhatjuk újabb összevonásokban.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
17
Összevonások eredménye
dolgozó(dnév,fizetés,oszám) dolgozó+dolgozik összevonása osztály(onév,oszám,dnév) vezet+osztály+fınök összevonása szállító(snév,scím) cikk(cnév,cszám,oszám) cikk+beszerez összevonása rendelés(rszám,dátum,vnév) rendelés+felad összevonása vásárló(vnév,vcím,egyenleg) Összesen 8 relációsémát kaptunk! szállít(snév,cszám,ár) tartalmaz(rszám,cszám,mennyi)
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
18
Példa-3: Kapcsolat átírása relációkká név
cím
név
Ivók 1
Szereti
2
Kedvenc
férje
Cimbora
Házaspár
neje
gyártó
Sörök
Szereti(ivó, sör) Kedvenc(ivó, sör) Cimbora(név1, név2) Házaspár(férj, feleség)
A kapcsolatoknak megfelelı sémákban az oszlopokat célszerő átnevezni, például a szerepek alapján. Egyébként is (név,név) séma nem szerepelhetne.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
19
Relációk összevonása
Összevonhatunk 2 relációt, ha az egyik egy sok-egy kapcsolatnak megfelelı reláció, a másik pedig a sok oldalon álló egyedhalmaznak megfelelı reláció.
Példa: Ivók(név, cím) és Kedvenc(ivó,sör) összevonható, és kapjuk az Ivó1(név,cím,kedvencSöre) sémát.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
20
Példa-4: Gyenge egyedhalmaz átírása
név
név jelszó
Logins
Hová
Host gépek
cím
Hostgépek(hostNév, cím) Logins(loginNév, hostNév, jelszó) Hová(loginNév, hostNév, hostNév2) A logins kulcsa összetett: loginNév,hostNév Beolvasztjuk a Logins relációba Kétszer szerepelne az azonos értékő hostNév a Hová sémában 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
21
Példa-5: Alosztály átírása relációkká
név
Sörök
gyártó
isa szín
Alkoholmentes
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
22
Alosztályok átírása: három megközelítés 1.
Objektumorientált stílusban: Egy reláció minden alosztályra, felsorolva az összes tulajdonságot, beleértve az örökölteket is.
2.
Nullértékek használatával: Egyetlen reláció az öröklıdésben résztvevı összes osztályra. Ha egy egyed nem rendelkezik egy alosztály speciális tulajdonságával, akkor ezt az attribútumot NULL értékkel töltjük majd ki.
3. E/R stílusban: Egy reláció minden alosztályra, de az általános osztályból csak a kulcsokat vesszük hozzá a saját attribútumokhoz. 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
23
Objektumorientált stílusú reprezentálás
név Bud
név Summerbrew
gyártó Anheuser-Busch Sörök gyártó szín Pete’s világos Alkoholmentes
Az olyan lekérdezésekre jó, hogy egy adott gyártó milyen színő alkoholmentes söröket gyárt. 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
24
Nullértékek használatával
név gyártó szín Bud Anheuser-Busch Summerbrew Pete’s Sörök
NULL világos
Általában kevesebb hely elég a tárolásra, kivéve ha nagyon sok attribútum marad nullértékő.
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
25
E/K stílusú név gyártó Bud Anheuser-Busch Summerbrew Pete’s Sörök név Summerbrew
szín világos Alkoholmentes
Az olyan lekérdezésekre jó, hogy egy adott gyártó milyen söröket gyárt, beleértve az alkoholmenteseket is. 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
26
Példa-6: Alosztály átírása relációkká
06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
27
Specializáló kapcsolatok leképezése --- 1 1. Minden altípushoz külön tábla felvétele, egy egyed csak egy táblában szerepel. Az altípusok öröklik a fıtípus attribútumait. (Objektumorientált stílusú reprezentálás) HELYISÉG (épület, ajtószám, név, alapterület) TANTEREM (épület, ajtószám, név, alapterület, férıhely, tábla, vetítı) GÉPTEREM (épület, ajtószám, név, alapterület, gépszám) IRODA (épület, ajtószám, név, alapterület, telefon, fax) DOLGOZÓ (adószám, név, lakcím, épület, ajtószám) Hátrányok: – Kereséskor gyakran több táblát kell vizsgálni (ha például a D épület 803. sz. terem alapterületét keressük). – Kombinált altípus (például számítógépes tanterem) csak új altípus felvételével kezelhetı. 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
28
Specializáló kapcsolatok leképezése --- 2 2. Minden altípushoz külön tábla felvétele, egy egyed több táblában is szerepelhet. A fıtípus táblájában minden egyed szerepel, és annyi altípuséban ahánynak megfelel. Az altípusok a fıtípustól csak a kulcs-attribútumokat öröklik. (E/K stílusú reprezentálás.) HELYISÉG (épület, ajtószám, név, alapterület) TANTEREM (épület, ajtószám, férıhely, tábla, vetítı) GÉPTEREM (épület, ajtószám, gépszám) IRODA (épület, ajtószám, telefon, fax) DOLGOZÓ (adószám, név, lakcím, épület, ajtószám) Hátrány: Itt is elıfordulhat, hogy több táblában kell keresni (például ha a tantermek nevére és férıhelyére vagyunk kíváncsiak). 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
29
Specializáló kapcsolatok leképezése --- 3 3. Egy közös tábla felvétele, az attribútumok uniójával. Az aktuálisan értékkel nem rendelkezı attribútumok NULL értékőek. (Reprezentálás nullértékekkel) HELYISÉG (épület, ajtószám, név, alapterület, férıhely, tábla, vetítı, gépszám, telefon, fax) DOLGOZÓ (adószám, név, lakcím, épület, ajtószám) Hátrányok: – Az ilyen egyesített táblában általában sok NULL attribútumérték szerepel. – Elveszíthetjük a típusinformációt (például ha a gépteremnél a gépszám nem ismert és ezért NULL, akkor a gépterem lényegében az egyéb helyiségek kategóriájába kerül). 06B_EK_átírása // ELTE Adatbázisok-1 elıadás, 2014.
30