1 / 72

Objektumorientált adatbázisnyelvek

Objektumorientált adatbázisnyelvek. Objektumleíró nyelv Objektumlekérdező nyelv. Objektumelvű adatbáziskezelők. Szabványosító csoport: ODMG = Object Data Management Group. ODL = Object Description Language, mint az SQL CREATE TABLE része .

cian
Download Presentation

Objektumorientált adatbázisnyelvek

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. Objektumorientált adatbázisnyelvek Objektumleíró nyelv Objektumlekérdező nyelv

  2. Objektumelvű adatbáziskezelők • Szabványosító csoport: ODMG = Object Data Management Group. • ODL = Object Description Language, mint az SQL CREATE TABLE része. • OQL = Object Query Language, az SQL-t próbálja utánozni OO keretrendszerben.

  3. Keretrendszer --- 1 • Az ODMG elképurlése szerint az OO-DBMS gyártok megvalósítanak egy OO nyelvet, mint a C++, olyan kiterjesztésekkel (OQL), amelyekkel a programozó zökkenőmentesen átviheti az adatokat az adatbázis és a „gazdanyelv” között.

  4. Keretrendszer --- 2 • Az ODL-t tartós osztályok definiálására használjuk, amelyek objektumai maradandóan tárolhatók az adatbázisban. • Az ODL osztályok olyanok, mint az egyedhalmazok bináris kapcsolatokkal és metódusokkal. • Az ODL osztálydefiníciók a kibővített OO gazdanyelv részei.

  5. ODL áttekintés • Egy osztálydeklaráció tartalmazza: • Az osztály nevét. • Választhatóan kulcsdeklaráció(ka)t. • Extens deklaráció = az osztály létező objektumait tartalmazó halmaz neve. • Elemdeklarációkat. Egy elem lehet attribútum, kapcsolat vagy metódus.

  6. Osztálydefiníciók class <név> { <elemdeklarációk pontosvesszővel tagolt listája> }

  7. Attribútum- és kapcsolatdeklarációk • Az attribútumok (általában) osztályhoz nem kapcsolódó típusú elemek. attribute <típus> <név>; • A kapcsolatok egy objektumot egy vagy több, azonos osztálybeli objektumhoz kapcsolják. relationship <típus> <név> inverse <kapcsolat>;

  8. Inverz kapcsolatok • Tegyük fel, hogy a C osztály R kapcsolatban áll a D osztállyal. • Ekkor a D osztálynak valamilyen S kapcsolatban kell állnia a C osztállyal. • R-nek és S-nek egymás inverzének kell lennie. • Ha a dR kapcsolatban van c-vel, akkor c-nek S kapcsolatban kell lennie d-vel

  9. Az árul kapcsolat típusaSör objektumok halmaza. A :: operátor összekapcsoljaa jobb oldalon álló nevet azazt tartalmazó környezettel,amely a bal oldalon áll. Példa: Attribútumok és kapcsolatok class Kocsma { attribute string név; attribute string cím; relationship Set<Sör> árul inverse Sör::kapható; } class Sör { attribute string név; attribute string gyártó; relationship Set<Kocsma> kapható inverse Kocsma::árul; }

  10. Kapcsolatok típusai • Egy kapcsolat típusa lehet: • Osztály, pl. Kocsma. Ebben az esetben egy objektum csak egy Kocsma objektummal állhat kapcsolatban. • Set<Kocsma>: az objektum Kocsma objektumok halmazával van kapcsolatban. • Bag<Kocsma>, List<Kocsma>, Array<Kocsma>: az objektum Kocsma objektumokból álló zsákkal, listával vagy tömbbel van kapcsolatban.

  11. Kapcsolatok multiplicitása • Minden ODL kapcsolat bináris. • A sok-sok kapcsolatok típusa Set<…> a kapcsolat és inverz oldalon is. • A sok-egy kapcsolatok típusa Set<…> az „egy” oldalon és csak osztály a „sok” oldalon. • Az egy-egy kapcsolatok típusa mindkét irányban az osztály.

  12. Sok-sok: Set<…> mindkét irányban. Sok-egy: Set<…> csak az „egy” oldalon. Példa: Multiplicitások class Ivó { … relationship Set<Sör> szeret inverse Sör::rajongók; relationship SörkedvencSör inverse Sör::nagyRajongók; } class Sör { … relationship Set<Ivó> rajongók inverse Ivó::szeret; relationship Set<Ivó> nagyRajongók inverse Ivó::kedvencSör; }

  13. férj és feleség:egy-egy kapcsolatokés egymás inverzei haverok: sok-sok kapcsolat és a sajátinverze. Nem kell a ::, ha az inverzugyanabban az osztályban van. Másik példa multiplicitásra class Ivó { attribute … ; relationship Ivóférj inverse feleség; relationship Ivófeleség inverse férj; relationship Set<Ivó> haverok inverse haverok; }

  14. Többirányú kapcsolat kezelése • Az ODL nem támogatja a 3- vagy többirányú kapcsolatokat. • Szimulálhatjuk a többirányú kapcsolatokat egy „kapcsoló” osztállyal, amelynek objektumai reprezentálják az összekapcsolandó objektum n-eseket.

  15. Kapcsoló osztályok • Tegyük fel, hogy az X, Y és Z osztályokat akarjuk összekapcsolni R kapcsolattal. • Vegyünk fel egy C osztályt, amelynek objektumai az (x, y, z) hármasokat reprezentálják az X, Y, Z osztályokból. • Három sok-egy kapcsolatra lesz szükségünk (x, y, z)-ből x, y és z mindegyikéhez.

  16. Példa: Kapcsoló osztály • Tegyük fel, hogy van Kocsma és Sör osztályunk és szeretnénk reprezentálni, hogy melyik kocsma milyen áron adja a söröket. • A Kocsma és Sör közti sok-sok kapcsolatnak nem lehet ár attribútuma, szemben az E/K modellel. • Egy megoldás: készítsünk egy Ár osztályt és egy összekapcsoló BBP osztályt, amely az egymáshoz kapcsolódó kocsmákat, söröket és árakat reprezentálja.

  17. Példa, folytatás • Mivel az Ár objektumok csak számok, egy jobb megoldás: • Adjunk a BBP objektumokhoz egy ár attribútumot. • Használjunk két sok-egy kapcsolatot a BBP objektum és az általa reprezentált Kocsma és Sör objektumok között.

  18. Példa, befejezés • Itt a BBP definíciója: class BBP { attribute ár:real; relationship KocsmaaKocsma inverse Kocsma::toBBP; relationship SöraSör inverse Beer::toBBP; } • A Kocsma és Sör osztályokat módosítsuk, hogy mindkettőnek legyen toBBP tulajdonsága, amelyek típusa Set<BBP>.

  19. Struktúrák és felsorolások • Az attribútumok lehetnek struktúrák (mint a C-ben) vagy felsorolások. • Így deklaráljuk: attribute [Struct vagy Enum] <struct vagy enum neve> { <részletek> } <attribútum neve>; • A részletek mezőnevek és -típusok Struct-nál, konstansok listája Enum-nál.

  20. A struktura ésfelsorolás neve attribútumok neve Példa: Struct és Enum class Kocsma { attribute string név; attribute Struct CímT {int irsz, string város, string utca} cím; attribute Enum Eng { MINDEN, SÖR, SEMMI } engedély; relationship … }

  21. Ugyanazt azirsz-város-utcacímtípust használjuk Struct és Enum újrahasznosítása • Hivatkozhatunk egy Struct vagy Enum nevére másik osztálydefinícióban. • Használjuk a :: operátort a forrásosztály jelölésére. • Példa: class Ivó { attribute string név; attribute Struct Kocsma::CímTcím; …

  22. Metódusdeklarációk • Egy osztálydefiníció tartalmazhatja az osztályban levő metódusok deklarációit. • Az információ tartalma: • Visszatérésí érték típusa, ha van. • Metódus neve. • Argumentumok módja és típusa (nincs név). • A mód lehet in, out és inout. • Kivételek, amelyeket a metódus kiválthat.

  23. Példa: Metódusok real átlag(in string)raises(nincsJegy); • Az átlag függvény egy valós számot ad vissza (feltehetőleg egy hallgató átlagát). • Az átlagnak egy argumentuma van, egy string (feltehetőleg a hallgató neve) és nem módosítja az argumentumát. • Az átlag kiválthatja a nincsJegy kivételt.

  24. Az ODL típusrendszer • Alaptípusok: int, real/float, string, felsorolás típusok és osztályok. • Típuskonstruktorok: • Struct a struktúrákhoz. • Kollekció típusok : Set, Bag, List, Array és Dictionary ( = leképezés egy értelmezési tartományból egy képhalmazba). • A kapcsolatok típusa csak osztály vagy egy osztályra alkalmazott kollekció lehet.

  25. ODL alosztályok • A szokásos objektumorientált alosztályok. • A szülőosztályt kettősponttal és névvel jelöljük. • Az alosztályban csak az egyedi tulajdonságait soroljuk fel. • Megörökli a szülőosztály tulajdonságait is.

  26. Példa: Alosztályok • Az ale a sör alosztálya: class Ale:Sör { attribute string szín; }

  27. ODL kulcsok • Deklarálhat akárhány kulcsot egy osztályhoz. • Az osztály neve után adjuk meg: (key <kulcslista>) • Egynél több attribútumot tartalmazó kulcsot az attribútumok köré tett külön zárójellel jelöljük.

  28. Példa: Kulcsok class Sör (key név) { … • a név a sör kulcsa. class Kurzus (key (tanszék,szám),(hely, idő)){ • a tanszék és szám az egyik kulcs, a hely és idő a másik.

  29. Extensek • Minden osztályhoz tartozik egy extens, amely az osztályhoz tartozó létező objektumokat tartalmazó halmaz. • Az extens hasonló egy relációhoz, amelynek az osztály a sémája. • Az extenst az osztály neve után tüntetjük fel a kulcsokkal együtt, így: (extent <extens neve> … )

  30. Példa: Extensek class Sör (extent Sörök key név) { … } • Konvenció szerint egyes számot használunk az osztály nevének, többes számot a hozzá tartozó extensnek.

  31. OQL • Az OQL az objektumorientált lekérdezés szabványa. • Az ODL-t használja sémadefiníciós nyelvként. • Az OQL típusai olyanok, mint az ODL-ben. • A relációk szerepét a Set(Struct) és a Bag(Struct) játssza.

  32. Útvonal-kifejezések • LegyenxaCosztály egy objektuma. • Ha aegy attribútuma C-nek, akkorx.aaz attribútum értéke. • Haregy kapcsolataC-nek, akkorx.raz az érték, amelyhezxkapcsolódikr által. • Lehet egy objektum vagy objektumok halmaza, r típusától függően. • Hamegy metódusaC-nek, akkorx.m(…) az mx-re való alkalmazásának eredménye.

  33. Futó példa class Eladás (extent Eladások) { attribute real ár; relationship Kocsmakocsma inverse Kocsma::eladottSörök; relationship Sörsör inverse Sör::eladói; } class Kocsma (extent Kocsmák) { attribute string név; attribute string cím; relationship Set<Eladás> eladottSörök inverse Eladás::kocsma; }

  34. Futó példa, befejezés class Sör (extent Sörök) { attribute string név; attribute string gyártó; relationship Set<Eladás> eladói inverse Eladás::sör; }

  35. Példa: Útvonal-kifejezések • Legyen segy Eladás típusú változó, azaz kocsma-sör-ár objektum. • s.ár = az árazsobjektumban. • s.kocsma.cím = s-ből a kocsma kapcsolat mentén elért kocsma címe • Itt a pontok egymásba ágyazása helyes, mert s.bar egy objektum, nem objektumok kollekciója.

  36. Ez a kifejezés Eladás típusú objektumokhalmaza. Nincs neki ára. Példa: A pont helytelen használata • Nem használhatjuk a pontot, ha a bal oldalon egy kollekció áll, hanem csak akkor, ha egyetlen objektum. • Példa (helytelen), aholbegyKocsma: b.eladottSörök.ár

  37. OQL Select-From-Where • Relációjellegű kollekciókat számolhatunk ki OQL utasítással: SELECT <értéklista> FROM <kollekciók és típusjellemzők listája> WHERE <feltétel>

  38. FROM részmondat • Minden tagja az alábbi formájú: <kollekció> <tag neve> • Kollekció lehet: • Valamelyik osztály extense. • Egy kifejezés, amelynek értéke kollekció, pl. b.eladottSörök .

  39. Az Eladások az összesEladás objektumot tartalmazó extens. s sorra felveszimindegyik objektumértékét. Helyes kifejezések.s.sör egy sörobjektum, s.kocsmaegy Kocsmaobjektum. Az OQL idézőjeleket használ. Példa • Kérdezzük le Józsi kocsmájában az itallapot. SELECT s.sör.név, s.ár FROM Eladások s WHERE s.kocsma.név = "Józsi kocsmája"

  40. b.eladottSörök egy Eladás objektumokból álló halmaz, most pedig egy tipikus eladás objektum, amely Józsi kocsmájával kapcsolatos. Másik példa • Ez is megszerzi Józsi itallapját: SELECT s.sör.név, s.ár FROM Kocsmák b, b.eladottSörök s WHERE b.név = "Józsi kocsmája"

  41. Trükkök útvonal-kifejezésekkel • Ha egy útvonal-kifejezés egy objektumot jelöl, akkor kiterjesztheti egy ponttal és az objektum egy tulajdonságával. • Példa: s, s.kocsma, s.kocsma.név • H a egy útkifejezése kollekciót jelöl, akkor nem terjesztheti ki, de felhasználhatja a FROM részmondatban. • Példa: b.eladottSörök

  42. Az eredmény típusa • Alapértelmezésben a select-from-where eredményének típusa egy struktúrákból álló zsák. • A struktúrának egy-egy mezője van a SELECT részmondat minden tagjához. A neve és típusa megegyezik az útvonal-kifejezés utolsó elemével. • Ha a SELECT csak egytagú, akkor technikailag az eredmény egy egymezős struktúra. • Viszont az egyelemű struktúra azonosítható az egy elemmel.

  43. Példa: Eredménytípus SELECT s.sör.név, s.ár FROM Kocsmák b, b.eladottSörök s WHERE b.név = "Józsi kocsmája" • Típusa: Bag(Struct(név: string, ár: real))

  44. Mezők átnevezése • Mezők átnevezéséhez tegyük elé az új nevet és egy kettőspontot. • Példa: SELECT sör: s.sör.név, s.ár FROM Kocsmák b, b.eladottSörök s WHERE b.név = "Józsi kocsmája" • Az eredmény típusa: Bag(Struct(sör: string, ár: real)).

  45. Struktúrák halmazának előállítása • Adjuk hozzá a DISTINCT kulcsszót a SELECT után, így az eredmény egy halmaz lesz és a duplikált elemek törlődnek. • Példa: SELECT DISTINCT s.sör.név, s.ár FROM Kocsmák b, b.eladottSörök s WHERE b.név = "Józsi kocsmája" • Az eredmény típusa: Set(Struct(név: string, ár: string))

  46. Struktúrák listájának előállítása • Használjuk az ORDER BY részmondatot, mint az SQL-ben, így az eredmény egy lista lesz, amelyben a struktúrák az ORDER BY-ban felsorolt mezők szerinti sorrendben lesznek. • Növekvő (ASC) az alapértelmezett; csökkenő (DESC) is lehetséges. • A lista elemeit indexekkel érhetjük el: [1], [2],… • Az SQL kurzorokhoz hasonló lehetőségeket ad.

  47. Példa: Listák • Legyen joeMenu egy gazdanyelvi változó ezzel a típussal: List(Struct(név:string, ár:real)) joeMenu = SELECT s.sör.név, s.ár FROM Kocsmák b, b.eladottSörök s WHERE b.név = "Józsi kocsmája" ORDER BY s.ár;

  48. Példa, folytatás • Most a joeMenu értéke egy lista, amelynek elemei a Józsi által eladott sörök név-ár párjai. • Elérhetjük az első (legolcsóbb) elemet joeMenu[1], a következőt joeMenu[2] alakban stb. • Példa: Józsi legolcsóbb sörének neve: legolcsóbb = joeMenu[1].név;

  49. COUNT megadja akollekció elemszámát. Példa, befejezés • Miután kiértékeltük a joeMenu-t, kiírhatjuk Józsi itallapját efféle kóddal: cout << "Sör\tÁr\n\n"; for (i=1; i<=COUNT(joeMenu); i++) cout << joeMenu[i].name << “\t” << joeMenu[i].price << “\n”;

  50. Alkérdések • Egy select-from-where kifejezés körülvehető zárójelekkel és felhasználható alkérdésként többféle módon, pl. • FROM részmondatban kollekcióként. • EXISTS és FOR ALL kifejezésben.

More Related