1 / 27

Objektum-orientált adatbázisok Alapfogalmak

Objektum-orientált adatbázisok Alapfogalmak. Ispány Márton 2009. November 30. Változó kihívások az adatbázis rendszerekkel szemben. Tradicionális adatmodellek (relációs, hálózatos, hierarchikus) sikere a tradicionális alkalmazásoknál

garret
Download Presentation

Objektum-orientált adatbázisok Alapfogalmak

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Objektum-orientált adatbázisokAlapfogalmak Ispány Márton 2009. November 30.

  2. Változó kihívások az adatbázis rendszerekkel szemben • Tradicionális adatmodellek (relációs, hálózatos, hierarchikus) sikere a tradicionális alkalmazásoknál • Növekvő igény a komplex adatbázis alkalmazások iránt, pl. CAD/CAM, CIM, telekom, GIS, multimédia • Komplex objektum-struktúrák megjelenése, hosszabb futamidejű tranzakciók, új adattípusok (képek, filmek, nagy szöveges állományok) • Igény arra, hogy kezelni tudjunk tetszőleges adattípust a hagyományos lekérdező nyelvek megtartásával • OO programozási nyelvek elterjedése, a hagyományos adatbázis rendszerek nehézkesen működnek együtt OO nyelvekkel (C++, Java, Smalltalk)

  3. Objektum-orientált (OO) adatbázis rendszerek • Object Databases: Objektum-orientált adatbázisok • Object Database Management Systems (ODBMS): Objektum-orientált adatbázis-kezelő • Fő jellemző: a tervező specifikálni tudja mind a sokszorosan összetett objektumok szerkezetét, mind az ezeken az objektumokon alkalmazható műveleteket

  4. Példák ODBMS-re • Objektum-relációs rendszerek: a tradicionális DBMS-ek OO szemlélettel való bővítései (Oracle) • Tisztán OO rendszerek kísérleti prototípusai: ORION (MCC), OpenOODB (Texas Instruments), IRIS (HP), ODE (AT T Bell Labs) • Kommerciális tisztán OO rendszerek: GEMSTONE/S Object server (GemStone Systems), ONTOS DB, Objectivity/DB, Versant Object Database, ObjectStore, Ardent • Szabványosítás az ODMG (Object Database Management Group) konzorcium keretében (ld. később)

  5. OO fogalmak áttekintése • Objektum-orientált (OO) szó eredete az OO programozási nyelvekre vezethető vissza • SIMULA nyelv (60’s évek vége): az osztály fogalmának bevezetése, egy objektum belső adatstruktúrájának leírása egy osztály deklarációban • Absztrakt adattípus fogalmának bevezetése: a belső adatstruktúra elrejtése, az alkalmazható külső műveletek meghatározása (encapsulation – egységbezárás, tokosodás) • Első tiszta OO nyelvek egyike: Smalltalk (Xerox PARC), üzenet átadás és öröklődés • Hibrid OO nyelvek: C++

  6. Objektum • Két komponense van: állapot (érték) és tulajdonság (művelet) (korai definíció) • ,,Hasonló’’ a program változójához kivéve, hogy összetett adatstruktúra is lehet és a programozó speciális műveleteket definiálhat rajta • Az objektumok az OO nyelvekben tranziensek (átmenetiek), a futás befejeztével törlődnek • Az objektumok az ODBMS-ekben perzisztensek (állandóak), eltárolódnak, később kinyerhetőek és megoszthatóak más programokkal • Egy ODBMS általában több OO programnyelvhez kapcsolódik állandó és osztott objektumokat szolgáltatva számukra

  7. További jellemzők • Direkt kapcsolat a valós világ és az adatbázis objektumai között az OID révén • Tetszőlegesen összetett szerkezetű objektum megengedett (minden az objektummal kapcsolatos információ tárolható, míg a relációs adatbázisokban az információ sok relációban szóródik szét) • Instance változók: azon értékeket hordozzák, melyek az objektum belső állapotát írják le. Hasonló a relációs modell attribútumához kivéve, hogy a külső felhasználók számára nem láthatóak. • Teljes egységbezárás: minden a felhasználók által használható műveletnek előre definiáltnak kell lenni. (Túl szigorú, pl. a lekérdezésekhez tudni kell az attribútum neveket, az ad-hoc lekérdezéseket nehéz specifikálni.)

  8. További jellemzők • Az egységbezárás támogatására a műveletek két részből állnak: interfész (felület) és metódus (törzs). Az első a művelet nevét és paramétereit írja le, a második a művelet implementációját specifikálja. • Típusok és osztályok hierarchiája és öröklődése • Reláció-kezelés: az egységbezárás miatt ez elrejtésre került a külső felhasználók számára (korai rendszerek problémája), az ODMG szabvány ezt megoldotta a bináris kapcsolatok explicit megjelenítésével, inverz hivatkozási párral • Verzió-kezelés: egy objektumnak időbeni története van, ennek a nyomonkövetése. Sémaevolúció (ld. ALTER TABLE)

  9. További jellemzők • Művelet túlterhelés (operator overloading): ugyanaz a művelet többféle típusú objektumon is végrehajtható, a művelet nevéhez több különböző implementáció tartozik attól függően, hogy milyen objektumra kívánjuk alkalmazni. (operátor polimorfizmus -- polymorphism) • Késői kötés: a futás során kapcsolódik össze a művelet neve és a megfelelő implementáció.

  10. Objektum azonosító • Az adatbázisban tárolt minden különböző objektum kap egy azonosítót: objektum azonosító (OID - object identifier). • Feladata: az adatbázis objektumainak egyértelmű azonosítása, segítségével objektumok közötti hivatkozásokat tudunk létrehozni és kezelni. Egy program alkalmas típusú változójához is hozzárendelhetjük ha szükséges. • Tulajdonságok: megváltozhatatlanság, egyértelműség, láthatatlanság (külső felhasználó szempontjából), ábrázolás hosszú egész • Objektumok és értékek: a legtöbb rendszer külön kezeli, az objektumok megváltozhatatlan OID-vel rendelkeznek, míg az értékeknek nincs OID-jük (így más objektumok nem hivatkozhatnak rájuk) és csak magukban állnak. Egyes rendszerek megengednek OID nélküli komplex struktúrákat.

  11. Objektumok • OO databázisokban egy összetett objektum állapota más objektumok alapján határozódik meg ún. típus konstruktorok segítségével. • Objektumok formális leírása egy hármassal történik: (i,c,v), ahol i az objektum azonosítója, c a típus konstruktor és v az objektum állapota (jelenlegi értéke) • Alapvető konstruktorok: atom, rekord, halmaz • További konstruktorok: lista, zsák (bag), tömb

  12. A konstruktorok értelmezése • (i, atom, érték): az i azonosítójú objektum állapota a v atomi értéket veszi fel • (i, halmaz, {i1, i2, …, in}): az i azonosítójú objektum egy halmaz, amely az i1, i2, …, in (általában azonos típusú) objektumokból áll • (i, rekord, <a1:i1, a2:i2, …, an:in>): az i azonosítójú objektum egy n hosszú rekord, melyben aj a j-edik attribútum neve, ij pedig annak az objektumnak az azonosítója melyet értéknek felvesz • (i, lista, [i1, i2, …, in]): az i azonosítójú objektum egy rendezett lista (azonos típusú) a felsorolásbeli azonosítójú objektumokból • (i, tömb, [i1, i2, …, in]): az i azonosítójú objektum egy egy-dimenziós tömb a listabeli azonosítójú objektumokból

  13. Konstruktorok összehasonlítása • A lista abban különbözik a halmaztól, hogy rendezett. • A tömb abban különbözik a listától, hogy a dimenzója véges (ismert). • A zsák abban különbözik a halmaztól, hogy ugyanaz az objektum többször is szerepelhet.

  14. Konstruktorok alkalmazása és osztályozása • Ez az objektum modell megengedi a korábban definiált és más konstruktorok tetszőleges mélységű egymásba ágyazását. • Mivel az összetett (nem-atomi) objektumok más, egyszerűbb objektumokra hivatkoznak az objektum azonosítók révén, az aktuális állapot csak az atomi típusú objektumok állapotaiban jelenik meg. • Gyűjtemény (kollekció – collection) konstruktor típusok: halmaz, lista, tömb, zsák. • Strukturált konstruktor típusok: rekord (hasonló a struct konstruktorához a C(++) nyelvnek)

  15. Példák objektumokra • Egy vállalathoz kapcsolódó objektumok, használt konstruktorok: atom, halmaz, rekord, i1, i2, … a rendszer által generált objektum azonosítók. • O1=(i1, atom, `Debrecen’) O2 =(i2, atom, `Miskolc’) O3 =(i3, atom, `Budapest’) O4=(i4, atom, 5) O5=(i5, atom, `Kutatás’) O6=(i6, atom, `1988-05-22’) O7=(i7, set, {i1, i2, i3}) O8=(i8, rekord, <Rnév:i5, Rszám:i4, Vezető:i9, Telephely:i7, Alkalmazottak:i10, Projektek:i11>) O9=(i9, rekord, <Vezető:i12, Kezdő_dátum:i6>) O10=(i10, halmaz, {i12,i13,14}) O11=(i11, halmaz, {i15,i16,17}) O17=(i17, rekord, <Vnév:i18, Knév:i19, Szsz:i20, Fizetés:i21, Részleg:i8>)

  16. Objektumok összehasonlítása • Erős egyenlőség: két objektum azonos állapotban van ha a gráfjaik minden lehetséges szempontból (pl. az OID-k minden szinten) megegyeznek. • Gyenge egyenlőség: Két objektum egyenlő állapotban van ha a gráfjaik szerkezete megegyezik és a gráfban lévő atomi értékek is megegyeznek (de pl. a gráf közbenső szintjein az OID-k már nem feltétlen)

  17. Példa objektumok összehasonlítására • O1=(i1, rekord, <a1:i4, a2:i6> O2=(i2, rekord, <a1:i5, a2:i6> O3=(i3, rekord, <a1:i4, a2:i6> O4=(i4, atom, 10) O5=(i5, atom, 10) O6=(i6, atom, 20) • O1 és O3 között erős egyenlőség van hiszen gráfjaik teljesen megegyeznek • O1 és O2 között gyenge egyenlőség van hiszen gráfjaik szerkezete és az atomi értékek benne megegyeznek, de két különböző OID (O4 ill. O5) szerepel benne ezért nincs erős egyenlőség

  18. Típus konstruktorok • Az Object Definition Language (ODL) foglalja magukba a korábban definiált és más típusokat létrehozó konstruktorokat. • Arra használjuk, hogy az OO adatbázis séma adatszerkezetét hozzuk létre velük.

  19. Műveletek egységbezárása • Cél: absztrakt adattípusok kezelése, információ-elrejtés (szemben a tradicionális relációs modellel, ahol minden reláció összes attribútumával együtt látható a felhasználók és külső programok számára) • Egy objektumtípust viselkedésének leírásával definiálunk, melyet az objektumtípushoz külső hozzáférést biztosító műveleteken alapulnak. • Műveletek: objektumok létrehozása, törlése, állapotának módosítása, egyes részeihez való hozzáférés biztosítása ill. ezek kombinációi

  20. Műveletek egységbezárása • Műveletek felépítése: interfész (szignatúra) mely a műveletek nevét és paramétereit definiálja (látható), implementáció (metódus) az objektum belső adatszerkezetét és az eléréséhez szükséges műveletek leírását tartalmazza (rejtett) • Egy metódus hívása egy üzenetküldéssel történik az objektum felé, hogy hajtsa végre azt. • Teljes egységbezárás: túl erős követelmény, általában az objektumok szerkezetét két részre, látható és rejtett attribútumokra osztjuk

  21. Műveletek egységbezárása • A módosítás (update) műveletek egységbezárása: előnye hogy kevés integritási megszorítást kell előredefiniálni, ezeket a metódusokba lehet beleprogramozni. Így ezek a megszorítások automatikusan kikényszeríthetőek • Objektumtípusok definiálása a class kifejezéssel történik • Jellemző műveletek: objektum konstruktor illetve destruktor • Pontozott minősítés: objektum_név.művelet

  22. Objektumok állandóságának biztosítása • Tranziens és perzisztens objektumok • Általában nem minden objektumtípus lesz állandó (perzisztens) egy adatbázisban, ezt külön biztosítani kell • Az állandóság biztosítása: elnevezési mechanizmussal vagy elérhetőséggel • Elnevezési mechanizmus: egyértelmű és állandó nevet ad egy objektumnak, mellyel hivatkozhatunk rá külső programokból (belépési pont) • Elérhetőségi mechanizmus: segitségével perzisztens objektumokból érhetünk el további objektumokat (így elég kevés számú perzisztens objektumot definiálnunk)

  23. Objektumok állandóságának biztosítása • Egy B objektum elérhető az A objektumból ha az objektum gráfban hivatkozások (élek) egy sorozata vezet A-ból B-be • define class IRODA_SET; type set (IRODA); operations add_iroda(d: IRODA): boolean; (új iroda hozzáadása) remove_iroda(d: IRODA): boolean; (iroda törlése) create_iroda_set: IRODA_SET; (új iroda-halmaz létrehozása) destroy_iroda_set: boolean; (iroda-halmaz megszüntetése) end IRODA_SET; persistent name MINDEN_IRODA: IRODA_SET; d:=create_iroda; (új iroda létrehozása a d változóban) b:=MINDEN_IRODA.add_iroda(d); (d perzisztenssé tétele) • A MINDEN_IRODA objektum az IRODA osztály extentje, amely minden IRODA típusú objektumot perzisztenssé tesz.

  24. Típus (osztály) hierarchia • Számos objektumot szeretnénk kezelni • Új típusok létrehozásakorábbiakból • Típus: (név, attribútumok, műveletek) • Függvények: attribútumok (instance változók), műveletek. Attribútum: argumentum nélküli függvény • TYPE_NAME: function, …, function Példa: SZEMÉLY: Név, Cím, Szül_dátum, Kor, Szsz ahol a Kor művelet, amellyel az életkort számolhatjuk ki, a többi pedig attribútum.

  25. Típus (osztály) hierarchia • Szubtípus (altípus): egy olyan új típus, amely egy már definiált típus összes függvényét tartamazza • Szupertípus (szülőtípus): az a típus, amelyből a szubtípust származtattuk • Példa: DOLGOZÓ: Név, Cím, Szül_dátum, Kor, Szsz, Fizetés, Alk_kezdete, Beosztás HALLGATÓ: Név, Cím, Szül_dátum, Kor, Szsz, Szak, Tan_átlag • DOLGOZÓ subtype-of SZEMÉLY: Fizetés, Alk_kezdete, Beosztás

  26. Típus (osztály) hierarchia • HALLGATÓ subtype-of SZEMÉLY: Szak, Tan_átlag • Típus hierarchia: az összes szuper/szub típus kapcsolat rendszere • Átnevezés: hierarchia révén származtatott függvények átnevezése

  27. Extentek • Ugyanolyan típusú objektumok egy kollekciója • A cél az, hogy az objektumainkat állandóvá tegyük • Általában az összes azonos típusú objektum szerepel a típushoz tartozó extentben • Object: minden objektumot tartalmazó extent

More Related