270 likes | 374 Views
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
E N D
Objektum-orientált adatbázisokAlapfogalmak 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 • 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)
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
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)
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++
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
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.)
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)
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ó.
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.
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
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
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.
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)
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>)
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)
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
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.
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
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
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
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)
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.
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.
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
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
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