Adatbázis rendszerek 5. előadás Adatbázis tervezés Koppányi Zoltán koppanyi.zoltan@epito.bme.hu
Előző óra Redundancia, Anomáliák: beszúrás, törlés, módosítás Funkcionális Normalizálás Normál Táblák konzisztencia függőség és szerepe formák dekompozíciója
Tervezési minták
Tervezési minták (design patterns) Tervezés történhet: Tapasztalat alapján Szabványok, előírások alapján Tervezési minták alapján A tervezési minták összegyűjtött tapasztalatok, amelyek mindegyike egy-egy gyakran előforduló problémára ad általánosított választ. Tervezési mintákkal találkozhatunk menedzsmentben, építészetben, stb.
Tervezési minták Először Christopher Alexander alkalmazta az építészetben. Wikipédiáról: Ő volt az, aki olyan, az építészetben újra és újra felbukkanó mintákat keresett, amelyek a jól megépített házakat jellemzik. Könyvében, a The Timeless Way of Buliding -ben olyan mintákat próbált leírni, amelyek segítségével akár egy kezdő építész is gyorsan jó épületeket tervezhet. A minták a magukban hordozott különböző építészek sok éves tapasztalata miatt szebb, jobb vagy használhatóbb házakat eredményeztek, mintha a tervezőnek csupán saját erejére támaszkodva kellett volna megterveznie azokat. Később, elsősorban az informaiktában, azon belül is szoftverfejlesztésben terjedt el: pl.: programtervezési minták
Tervezési minták Adatbázisok lehetőség van. Azonban kialakítására végtelen sok ezek közül csak néhány optimális. Akik már sok hasonló problémával találkoztak (azaz tapasztaltak) könnyen előhúzhatnak egy megoldást. A tapasztalatlanok számára könnyebb ha dokumentálva kézhez kaphatják ezeket. Az itt bemutatásra kerülő minták, az előadók és a házifeladatok tapasztalatai alapján készültek.
A Jegyzőkönyv Feladat: Tipikus probléma, amikor katalógusokat, listákat kell létre hozni és azokat táblába tárolni. Ekkor gyakran előfordul például, hogy egy katalógus listában ugyanaz a gyártó szerepel. Megoldás: A redundancia csökkentése végett, ezeket az ismétlődéseket külön táblába emeljük ki. A kiemelt tábla kulcsát szerepeltetjük az eredeti táblában, mint idegen kulcsot.
A Jegyzőkönyv Jegyzőkönyv ID: Számláló Lista: Egész (IK) Lista: Egész (IK) Érték: Bármi N N Lista ID: Számláló Osztály: Szöveg... Lista ID: Számláló Osztály: Szöveg...
A Jegyzőkönyv Példa: kiindulás Katalógus ID Megnevezés Típus Gyártó Keresztmetszet Ár T- beton BetonGyártó Kft. 500 50 T- acél AcélGyártó Kft. 500 50 P- beton Védmű Zrt. 500 50 K- acél BetonGyártó Kft. 00 650
A Jegyzőkönyv Példa: megoldás Katalógus ID Megnevezés TípusID GyártóID Keresztmetszet Ár T- 500 50 T- 500 50 P- 500 50 K- 00 650 Típus Gyártó ID Típus Egyéb ID Gyártó Cím Beton... BetonGyártó Kft.... Acél... AcélGyártó Kft.... Védmű Zrt....
A Jegyzőkönyv előnyök, hátrányok Előnyök Redundancia csökkenés Kiemelt táblában további információk (új oszlopok) könnyen megadhatóak. (pl. cím oszlop bevezetése az előző példában) A kiemelt táblában az értékek egyszerűen megváltoztathatóak, adatbázis anomáliák elkerülhetőek. (pl.: előző példában a gyártó neve) A kiemelt táblában a többszörös névfelvétel elkerülhető, ha arra egyediséget előírunk. (pl.: gyártó csak egyszer forduljon elő) Hátrányok: Az ID-k nehezen értelmezhetőek. A táblák között kapcsolat kialakítása szükséges egy esetleges lekérdezés esetén. (pl.: gyártó nevére való szűréskor)
A Mérés Feladat: Egy adott műszer több mérést végez, és azokat táblába rögzítjük. Szeretnénk nyilvántartani a műszerek méréseit egy adatbázisban Megoldás: Ahelyett, hogy minden műszerhez létrehozunk egy külön táblát, a méréseket egy táblában tároljuk és az egyes műszerekhez tartozó méréseket külön sorszámmal azonosítjuk, hasonlóan az együtt kezelendő méréseket egy másik sorszámmal kategorizáljuk (pl. azonos időben végzett mérések).
A Mérés Mérés ID: Számláló SzenzorNév: Szöveg MérésSorszám: Egész MérésÉrték: Bármi
A Mérés Mérés ID Szenzor MérésSorszám Nyúlás Bélyeg 0 Bélyeg 0 Bélyeg 0 Bélyeg 0 Gyakran használjuk az időbélyeget (timestamp), mint a mérés azonosítóját Mérés ID Szenzor Timestamp Nyúlás Bélyeg 05.05.05 :0:0 0 Bélyeg 05.05.05 :0:0 0 Bélyeg 05.05.05 :0:0 0 Bélyeg 05.05.05 :0:0 0
A Mérés + Jegyzőkönyv Mérés ID: Számláló ListaElemID: Int (IK) MérésSorszám: Int MérésÉrték: Bármi N Lista ID: Számláló Név: Szöveg...
A Mérés + Jegyzőkönyv Példa Mérés ID SzenzorID Timestamp Nyúlás 05.05.05 :0:0 0 05.05.05 :0:0 0 05.05.05 :0:0 0 05.05.05 :0:0 0 Szenzor ID Típus Egyéb Bélyeg... Bélyeg...
A Mérés előnyök, hátrányok Előnyök Könnyű új szenzor felvétele. A mérések együtt könnyebben kezelhetőek. Kevesebb tábla. Hátrányok: Egy adott műszer elemzéséhez a műszerre rá kell szűrni
A Flexibilis tábla Feladat: Gyakori probléma, hogy egy tábla attribútumai későbbiekben változhatnak, például a specifikáció változása miatt, vagy egy reláció (tábla) nagyon sok attribútumot tartalmaz, vagy a táblában gyakran fordulnak elő elemek különböző attribútumokban. Megjegyzés: ebben az esetben általában az E/K diagram nem megfelelő, mivel az egyed több dolgot ír le- Ekkor szükséges az E/K diagram felülvizsgálata és további egyedek bevezetése. Azonban néha tervezési döntésként ezeket egy táblába akarjuk tárolni. Ez általában hierarchikus kapcsolat megtartására utal. Megoldás: Egy táblába felvesszük az attribútumokat. Az adatokat tartalmazó táblába egy oszlopba megadjuk az attribútum nevét, egy másik oszlopba pedig az azokhoz tartozó értékeket.
A Flexibilis Tábla FelxibilisTábla ID: Számláló Név: Szöveg AttribútumID: Egész (IK) N AttribútumÉrték: Bármi Attribútum ID: Számláló AttribútumNév: Szöveg...
Adatok hierarchikus kapcsolata Járművek Mérés Repülőgép Bélyeges mérés Gépkocsi Motor Gyorsulás mérés Szintezési mérés Nagyobb halmaz Kisebb halmaz I. Kisebb halmaz III. Kisebb halmaz II.
A Flexibilis tábla Mérés ID Szenzor Gyorsulás Nyúlás Elmozdulás Bélyeg 0 Gyorsulás Mérő 0 Szintező 0 Bélyeg 0 Járművek ID Szenzor Név Ajtók Gyorsulás száma Szárnyak Nyúlásfesztávja Elmozdulás Kerekek száma Gépkocsi Bélyeg 0 Gyorsulás Motor 0 Gépkocsi Szintező 0 Repülőgép Bélyeg 8 0 00
A Flexibilis Tábla FelxibilisTábla ID: Számláló Név: Szöveg AttribútumID: Egész (IK) N AttribútumÉrték: Bármi Attribútum ID: Számláló AttribútumNév: Szöveg...
A Flexibilis tábla Példa: kiindulás Mérés ID Szenzor Gyorsulás Nyúlás Elmozdulás Bélyeg 0 Gyorsulás Mérő 0 Szintező 0 Bélyeg 0 Járművek ID Szenzor Név Ajtók Gyorsulás száma Szárnyak Nyúlásfesztávja Elmozdulás Kerekek száma Gépkocsi Bélyeg 0 Gyorsulás Motor 0 Gépkocsi Szintező 0 Repülőgép Bélyeg 8 0 00
A Flexibilis tábla Példa: megoldás. Mérés ID Szenzor MérésTípusID Érték Bélyeg 0 Gyorsulás Mérő 0 Szintező 0 Bélyeg 0 MérésTípus ID Mérés Típus Gyorsulás Nyúlás Elmozdulás
A Flexibilis Tábla + Mérés FelxibilisTábla ID: Számláló Szenzor: Szöveg MérésSorszám: Egész AttribútumID: Egész (IK) AttribútumÉrték: Bármi N Attribútum ID: Számláló AttribútumNév: Szöveg...
A Flexibilis tábla + Mérés Mérés ID Szenzor MérésSzámláló MérésTípusID Érték Bélyeg 0 Gyorsulás Mérő 0 Szintező 0 Bélyeg 0 MérésTípus ID Mérés Típus Gyorsulás Nyúlás Elmozdulás
A Flexibilis Tábla + Mérés + Jegyzőkönyv FelxibilisTábla ID: Számláló ListaElemID: Egész (IK) MérésSorszám: Egész AttribútumID: Egész (IK) AttribútumÉrték: Bármi N N Lista ID: Számláló Név: Szöveg... Attribútum ID: Számláló AttribútumNév: Szöveg...
A Flexibilis tábla + Mérés + Jegyzőkönyv Mérés ID SzenzorID MérésSzámláló MérésTípusID Érték 0 0 0 0 5 5 6 5 MérésTípus Szenzor ID Mérés Típus ID Mérés Típus Bélyeg Gyorsulás Gyorsulás Mérő Nyúlás Szintező Elmozdulás
A Flexibilis tábla Példa: megoldás. Járművek ID Név AttribútumID Érték Gépkocsi Gépkocsi Motor Gépkocsi 5 Gépkocsi 6 Repülőgép 8 7 Repülőgép 0 8 Repülőgép 8 ID Attribútum Ajtók száma Szárnyak feszt. Kerekek száma
A Flexibilis tábla előnyök, hátrányok Előnyök Könnyű új attribútum felvétele Elkerülhető sok érték használata Hiarerchikus adatok együtt kezelhetőek Hátrányok: Nehezebb és bonyolultabb lekérdezések Nem minden esetben optimális megoldás
A Csomópont Feladat: Egyes esetekben előfordul, hogy egy entitás önmagára mutat, így például egy csomópontba befutó utak. Megoldás: Amennyiben a csomóponthoz két entitás tartozik, akkor azt egy táblába tárolhatjuk, ahol az összetartozást a tábla egy oszlopa adja, mely idegen kulcs a tábla elsődleges kulcsára. Több csatlakozás esetén egy külön kapcsoló táblába emeljük ki a kapcsolódó elemeket.
A Csomópont - egy ágú kapcsolat Út ID: Számláló Név: Szöveg Kapcsoló: Egész (IK) N
A Csomópont Példa egy ágú kapcsolat Út ID Út név Csatlakozás M0 M M M
A Csomópont - több ágú kapcsolat Út ID: Számláló Név: Szöveg Csomópont ID: Számláló CspSzám: Egész Sorszám: Egész ÚtID: Egész (IK) N
A Csomópont Példa több ágú kapcsolat Út ID Út név M0 M M M Csomópont ID Csomópont név CspSzám Sorszám ÚtID M0-M-M M0-M-M M0-M-M M0-M 5 M0-M
Kiterjesztett relációs algebra
Az ismétlődések megszüntetése Delta op. A műveleteinket multihalmazon definiáltuk Így a sorok ismétlődhetnek Előfordul hogy csak vagyunk kíváncsiak Ekkor δ (S ) δ ( a különálló sorokra használható a delta operátor. Név Jegy Jelenlét Kiss Pista Nagy Péter Kiss Pista Nagy Ákos 0 )= Név Jegy Jelenlét Kiss Pista Nagy Péter Nagy Ákos 0
Attribútum átnevezés Az attribútumok nevei átnevezhetőek a nyilat ( ) használhatjuk egy operátor, művelet belsejében Erre Így például projekcióesetén: π réginév újnév (S ) π Név Hallgató ( Név Jegy Jelenlét Hallgató Kiss Pista Kiss Pista Nagy Péter Kiss Pista Nagy Ákos 0 )= Nagy Péter Kiss Pista Nagy Ákos
Attribútum átnevezés Az átnevezés után ezzel az új attribútum névvel végezhetünk műveleteket. σ Hallgató=' Kiss Pista '( π Név Hallgató ( = Név Jegy Jelenlét Kiss Pista Nagy Péter Kiss Péter Nagy Ákos 0 Hallgató Kiss Pista ))
Kiterjesztett projekció Új attribútum vezethető le πtermék, Darab Ár ( = Termék Darab Ár Tej 50 50 Kenyér 0 Túró Rudi 00 Termék Darab*Ár Tej 50 50 Kenyér 0 Túró Rudi 600 )
Kiterjesztett projekció + Átnevezés A levezetett átnevezzük új πtermék, Darab Ár ÖsszÁr( = attribútumot Termék Darab Ár Tej 50 50 Kenyér 0 Túró Rudi 00 Termék ÖsszÁr Tej 50 50 Kenyér 0 Túró Rudi 600 legtöbbször )
Csoportosítás Csoportosítás a reláció sorainak csoportokba történő beosztása a reláció egy vagy több attribútumának értékétől függően. Jele: γ attr, attr,... (S ) Termék γtermék (πtermék ( Darab Kenyér Tej ))
Lépésről lépésre Termék π Termék ( Darab Kenyér Tej Tej Termék γtermék ( Termék Kenyér Tej )= Termék )= Kenyér Tej Kenyér
Csoportosítás + Összegzés Ahogy láttuk a csoportosítás ugyanolyan elemeket von össze az adott attribútumon. Azonban sorokat, módon. a többi attribútum is tartalmaz ezeket összesíthetjük valamilyen Az összesítéshez különböző függvényeket alkalmazhatunk a gamma operátoron belül. Ezek a következőek: SUM, AVG, MIN, MAX, COUNT, FIRST, LAST
Az eredmény reláció felépítése Osszuk a reláció sorait csoportokba. Egy csoport azokat a sorokat tartalmazza, amelyeknek az {attr, attr, } listán szereplő csoportosítási attribútumokhoz tartozó értékei megegyeznek. Ha nincs csoportosítási attribútum, akkor az egész R reláció egy csoportot képez. Minden csoporthoz hozzunk amelyik tartalmazza: csoport létre olyan sort, Szóban forgó attribútumait. csoportosítási Az {attr, attr, } lista összesítési attribútumaira vonatkozó összesítéseket.
Csoportosítás + Összegzés (Példa - SUM) Termék γtermék, SUM( Darab) ( Darab Kenyér Tej 5 Termék SumDarab Kenyér 8 Tej )=
Csoportosítás + Összegzés (Példa Több attribútumra) γtermék, SUM( Darab) ÖsszDb, SUM (ÖsszDb Ár ) ÖsszÁr ( Termék Darab Ár Kenyér 00 00 50 Kenyér 50 Tej 00 )= Termék ÖsszDb ÖsszÁr Kenyér 00 5 650 Tej 00
Csoportosítás + Összegzés (Példa - COUNT) Termék γtermék, COUNT( Darab ) ( Darab Kenyér Tej 5 Termék CountDarab Kenyér Tej )=
Csoportosítás + Összegzés (Példa - FIRST) Termék γtermék, FIRST ( Darab) ( Darab Kenyér Tej 5 Termék FirstDarab Kenyér Tej )=
Csoportosítás + Összegzés (Példa Több attribútumra) γtermék, SUM( Darab) ÖsszDb, SUM (ÖsszDb Ár ) ÖsszÁr ( Termék Darab Ár Kenyér 00 00 50 Kenyér 50 Tej 00 )= Termék ÖsszDb ÖsszÁr Kenyér 00 6 650 Tej 00
Sorrendezés A rendezetlen halmazon a sorba rendezés operátor segítéségével a rekordok rendezhetőek. ABC sorrend, növekvő, stb. Jele: τ Név ( τ attr, attr,... (S ) Név Jegy Jelenlét Név Kiss Pista Kiss Aladár Nagy Péter Kiss Pista Kiss Aladár Nagy Péter 0 Nagy Péter 0 Nagy Péter )= Jegy Jelenlét
Sorrendezés, több attribútumon Először az első attribútumon rendezünk, majd az azonos csoportba lévőket a következőn, és így tovább. τ Név, Jegy ( Név Jegy Jelen lét Kiss Pista Nagy Péter Kiss Aladár Név Jegy Jelenlét Nagy Péter 0 Kiss Aladár Kiss Pista Nagy Péter 0 Nagy Péter )=
Köszönöm a figyelmet!