Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Objektum relációs adatmodell. RDBMS OOP SDM ORDBMS OODBMS OOPPD Objektum orientált adatmodellek Heterogén megközelítés : mit jelent az OODB ?

Hasonló előadás


Az előadások a következő témára: "Objektum relációs adatmodell. RDBMS OOP SDM ORDBMS OODBMS OOPPD Objektum orientált adatmodellek Heterogén megközelítés : mit jelent az OODB ?"— Előadás másolata:

1 Objektum relációs adatmodell

2 RDBMS OOP SDM ORDBMS OODBMS OOPPD Objektum orientált adatmodellek Heterogén megközelítés : mit jelent az OODB ?

3 Third Generation Database System Manifesto (~1990) - Őrizze meg a (relációs) DBMS funkcionalitását - Támogassa az OO alapelveit - Nyílt rendszert alkosson ADT kezelése : összetett gyári típusok : saját típusok : metódusok létezése ADT egyedisége : belső objektum azonosító + látható kulcs ADT öröklési kapcsolat : Specializált típusok NULL, VIEW, integritási feltételek, halmaz megközelítés, ad-hoc query, függetlenségi szintek

4 OBST rendszer C++-ban megírt objektum tároló modulok alkalmazása nincs DBMS

5 ODL-OQL modell ODMG szabvány objektumtípusok sémaszerű megadása class onév { attributumok … metódusok … kapcsolatok … integritási felt. } reláció ( attributumok … integritási felt. … ) attribute … relationship …

6 ODL adattípusok atomi típusok struktúra halmaz multihalmaz tömb lista ODL kapcsolatok relationship céltípus knev [ inverse knev2 ] ODL metótusok mnev (paraméterlista) raises (kivétel); ODL integritási felt. key (attributumlista)

7 Öröklés interface onév : ős-i{ … } interfaceliteral class class onév EXTENDS ős – o : ős-i (extent enev) { … } struct onév : ős-o { … } extent : osztály objektumainak halmaza

8 -Atomi típusok : integer, float, character, string, boolean típusok megadása bag(2,1,2) struct(foo:bag(2,1,2), bar: „ dog ") set(struct(title:"My Fair Lady",year:1965), struct(title:"ET",year:1985), struct(title:"Jaws",year:1981) ) - K omplex típusok: Set(...) Bag(...) List(...) Array(...) Struct(...)

9 CLASS Movie : Product { extent Movies ; key (title,year) ; attribute string title; attribute integer year; attribute integer length; attribute enumeration(color,blackAndWhite) filmType; relationship Set stars inverse Star::starredIn; relationship Studio ownedBy inverse Studio::owns; float lengthInHours() raises (noLengthFound); starNames(out Set); otherMovies(in Star, out Set) raises(noSuchStar); };

10 interface Course { keys name,number; attribute string name; attribute string number; relationship List has_sections inverse Section::is_section_of; relationship Set has_prerequisites inverse Course::is_prerequisite_for; relationship Set is_prerequisite_for inverse Course::has_prerequisites; offer(in Semester) raises(already_offered); drop(in Semester) raises(not_offered); }

11 OQL: Az alap SQL nyelvre épül SELECT.. FROM.. WHERE.. GROUP BY.. HAVING.. ORDER Útvonal kifejezés: m1.m2.m3… m1  m2  m3  elemei tagokon vezet keresztül Az útvonalnak egyértelműnek kell lennie Többértékű elemnél külön változóhoz rendeljük (…expr… ) AS| |IN iterator_változó kvantorok: for all x in S: C(x) exists x in S: C(x) aggregátorok: avg( select-kif.) max(), min(), sum(), count() azonosító név: név : kifejezés

12 Melyik évben készült a "Gone With the Wind„ film? select m.year from Movies m where m.title = "Gone With the Wind" A Casablance film szereplőinek neve? select s.name from Movies m, m.stars s where m.title = "Casablanca" A Disney filmekben szereplők nevei? select distinct s.name from Movies m, m.stars s where m.ownedBy.name = "Disney" Az azonos helyen lakó sztárok párjai? select distinct Struct(star1: s1, star2: s2) from Stars s1, Stars s2 where s1.addr = s2.addr and s1.name < s2.name

13 A Disney filmekben szereplők nevei rendezve? select distinct s.name from (select m from Movies m where m.ownedBy.name = "Disney") d, d.stars s order by s.name A Disney filmekben szereplők rendezve? select s from Stars s where exists m in s.starredIn : m.ownedBy.name = "Disney" A filmek átlagos hossza? avg(select m.length from Movies m)

14 select std, yr, sumLength: sum(select q.m.length from partition q) from Movies m group by std:m.studio, yr:m.year select std, yr, sumLength: sum(select q.m.length from partition q) from Movies m group by std:m.studio, yr:m.year having max(select q.m.length from partition q) > 120

15 SELECT DISTINCT STRUCT (kod : x.azonosito, jegyek: (SELECT y.jegyek FROM x.targyak AS y WHERE y.ev = 2004)) FROM hallgatok AS x SELECT AVG(SELECT t.jegy FROM h.targyak AS t) FROM hallgatok AS h WHERE h.evfolyam = 4 (select distinct m from Movies m, m.stars s where s.name = "Harrison Ford") except (select distinct m from Movies m where m.ownedBy.name = "Disney")

16 Relációs és ODL/OQL modell összehasonlítása 1. minta feladat: leckekönyv ábrázolása hallgató szak félév tanszék oktató tárgy index bejegyzés beiratkozás engedélyek

17 relációs modellbeli megvalósítás OKTATO(okod, nev, szido, lakcim, tanszek, beosztas) TANSZEK(tkod, nev, cím, tvezeto, terulet) HALLGATO(hkod, nev, szido, lakcim, status) ENGEDELY(hallgato, datum, leiras, tipus) SZAK(szkod, nev, leiras) FELEV(fkod, ev, szak, leiras) TARGY(tkod, nev, oktato, tanszék, leiras, lezaras) BEIRATKOZAS(bkod, hallgato, felev,atlag, lezaras) INDEXB (bkod, beiratkozas, targy,tipus) BEIRAS(indexb, datum, tipus, érték, oktato)

18 ODL megvalósítás class szemely { struct lcim {string varos, string utca,..} attribute string nev; attribute date szido; attribute lcim lakcim; } class oktato extends szemely (extent oktatok) { attribute string beosztas; relationship tanszek egyseg inverse tanszek::oktatok; void indit (in targy t) raises (no_targy); } nagyobb tervezési munka, az összetett szerkezetek és azok viszonyát is fel kell fedezni csak a beépített kapcsolatok működnek hatékonyan

19 Minta lekérdezés tanszékenkénti átlagjegy az X szak hallgatóinál Y évben relációs algebra: SELECT AVG(b.ertek), k.nev FROM beiras b, indexb i, targy t, tanszek k, beiratkozas s, felev f, szak z WHERE f.ev = Y AND z.nev = X AND b.indexb = i.bkod AND i.targy = t.tkod AND t.tanszek = k.tkod AND i.beiratkozas = b.bkod AND b.felev = f.fkod AND f.szak = z.szkod GROUP BY k.nev nehézség: a kapcsolódó adatelemek illesztése lassú végrehajtás

20 OQL megvalósítás: SELECT atl: AVG(SELECT b.ertek FROM i.beiras b), tsz: i.targy.tanszek FROM indexb i WHERE i.beiratkozas.felev.szak.nev= X AND i.beiratkozas.felev.ev= Y Sok esetben egyszerűbb a kapcsolatok megfogalmazása gyorsabb művelet végrehajtás az implementáció bonyolultabb

21 SQL : SEQUEL SQL86 SQL89 SQL92 SQL1999 (SQL3) SQL2003 (SQL4) SQL-FRAMEWORK SQL-FOUNDATION SQL-CLI SQL-PSM SQL-BINDINGS SQL-MED SQL-OLB SQL-JRT SQL-XML SQL-OLAP …

22 SQL1999 ORDB modell új struktúra elemek:UDT (felhasználói típusok) VALUE OBJECT komplex struktúra egységbe zárás öröklés azonosítás overloading UDT-TABLES (objektum táblák) táblák nézetek

23 saját adattípusok megkülönböztető elemi típus struktúra típus érték objektum Elemi UDT CREATE TYPE tnev AS gytipus FINAL; CREATE TYPE TESTMAGASSAG AS INTEGER FINAL; CREATE TYPE SZULEV AS INTEGER FINAL; CREATE TABLE DIAKOK ( … TM TESTMAGASSAG CHECK (….), SZEV SZULEV, …)

24 szigorú típusegyezés SELECT 2004-SZEV, TM FROM DIAKOK WHERE TM > 180 OR SZEV < 10*TM; megoldás SELECT 2004-CAST(SZEV AS INTEGER), TM FROM DIAKOK WHERE CAST(TM AS INTEGER) > 180 OR CAST(SZEV AS INTEGER) < 10*CAST(TM AS INTEGER); a DOMAIN koncepciót hivatott kiváltani

25 Struktúrált UDT CREATE TYPE tnev UNDER őstnev AS szerkezet [NOT] INSTANTIABLE [NOT] FINAL hivatozas-szerkezet cast-szerkezet egyszeres öröklés megengedett szerkezet megadása attributum-nev típus [speciális integritási elem] típus : gyári UDT rugalmasan konstruálható

26 gyári adattípusok (bővebb mint SQL92) INTEGER NUMERIC(N,M) REAL FLOAT(M) CHAR(N) VARCHAR(N) CLOB BIT(N) BLOB DATE TIME TIMESTAMP BOOLEAN ARRAY[N] ROW(…) CREATE TYPE DIAK AS ( NEV VARCHAR(30), SZDAT SZEV, TESTM TM DEFAULT 180, CÍM ROW ( VAROSCHAR(20), HSZINTEGER ), TEL CHAR(13) ARRAY [3] ) itt nem állhat NOT NULL,.. PRIMARY KEY,.. nincs LIST,BUG,..

27 Hivatkozás az adatelemekre objektum.tag.tag…. de! : SQL parancsokban csak alias-néven keresztül lehet struktúra elemekre hivatkozni SELECT vevok.nev, vevok.cím.utca FROM vevok WHERE vevok.id = 34 SELECT c.nev, c.cím.utca, d.utca FROM vevok AS c, vevok.cím AS d WHERE c.id = 34 SELECT vevok.nev, vevok.cím.utca FROM vevok, vevok.cim WHERE vevok.id = 34

28 UDT típusú mezők kezelése CREATE TABLA dolgozo ( kod INTEGER, nyelvi NYELVISMERET ) INSERT INTO dolgozo VALUES ( 3, NEW NYELVISMERET(‘ANGOL’,3)); UPDATE dolgozo SET nyelv = NEW NYELVISMERET(‘ANGOL’,3); UPDATE dolgozo SET nyelv = NEW NYELVISMERET(nyelv.nyelvi,3); UPDATE dolgozo SET nyelv = nyelv.szint(3); UPDATE dolgozo SET nyelv.szint = 3; SELECT kod, CAST (nyelvi AS CHAR(20)) FROM dolgozo;

29 UDT táblák használata UDT típusú objektumok halmazát tárolja: UDT érték + OID (self-referencing column) a kapcsolódó táblák öröklési viszonya megegyezik az UDT-ék öröklési viszonyával, nem lehet ugrás a láncolatban CREATE TABLE táblanév UNDER tnev OF típus helyes hibás

30 Hivatkozás adattípusa DECLARE SECTION mm AS LOCATOR film END DECLARE SECTION lokátorok a LOB elemekhez CREATE TYPE nn AS ( mmREF (típus) ) hivatkozást tartalmazó attribútum mm->nn DEREF(mm) a hivatkozott objektum eleme a teljes hivatkozott objektum

31 CREATE TYPE CSAPAT_T AS ( NEV CHAR(20), LETSZAM NUMBER(3) SZEKHELY CÍM); CREATE TYPE JATEKOS_T AS ( NEV CHAR(20), CSAPAT REF (CSAPAT_T) ) INSTANTIABLE NOT FINAL ; CREATE TABLE CSAPATOK OF CSAPAT_T; CREATE TABLE JATEKOSOK OF CSAPAT_T; INSERT INTO CSAPATOK VALUES (‘ELORE’,23,..); SELECT J.CSAPAT->SZEKHELY FROM JATEKOSOK J … SELECT DEREF (J.CSAPAT) FROM JATEKOSOK J … még nem lehet a NEW operátort használni

32 Hivatkozás a procedurális elemekre eljárásfüggvénymetódus CALL e()fv()o.m() típushoz kötött rutinok legfontosabb jellemzői - belső vagy külső - SQL vagy más nyelv - adatkezelés módja - determinisztikusság - paraméterátadás módja

33 Metódusok kezelése - deklaráció - definiálás CREATE TYPE otip.. ( struktúra ) METHOD mnév (par.lista) RETURNS tipus LANGUAGE SQL | C … ; CREATE METHOD mnev()…; metódusok típusai: - original - overriding - static - instance - constructor

34 SELECT m1.m2.mnév() FROM … CREATE INSTANCE | STATIC | CONSTRUCTOR METHOD mnév(..) RETURNS tipus FOR otip BEGIN sql vagy külső RETURN … END CREATE TYPE otip.. ( struktúra ) [OVERRIDING] STATIC | INSTANCE | CONSTRUCTOR METHOD mnév (par.lista) RETURNS tipus LANGUAGE SQL | C …

35 CREATE TYPE DIAK AS ( NEV VARCHAR(30), SZDAT SZEV ) METHOD KOR () RETURNS INTEGER; CREATE INSTANCE METHOD KOR() RETURNS INTEGER FOR DIAK BEGIN RETURN 2004 – CAST (SELF.SZEV AS INTEGER); END

36 Speciális metódusok OBSERVER: diak.nev() MUTATOR:diak.nev(”Peter”) CONSTRUCTOR:NEW diak() STATIC:típus::nev() Hivatkozás-szerkezet REF IS SYSTEM GENERATED REF USING típus REF FROM attributumok CAST-szerkezet CAST bal SOURCE AS DISTINCT jobb WITH konv CAST bal DISTINCT AS SOURCE jobb WITH konv

37 Saját inicializáló metódus CREATE TYPE nyelvismeret AS ( nyelvVARCHAR(20), szintINTEGER ) CONSTRUCTOR METHOD nyelvismeret ( n1 VARCHAR(20), n2 INTEGER) RETURNS nyelvismeret; CREATE METHOD nyelvismeret ( n1 VARCHAR(20), n2 INTEGER) RETURNS nyelvismeret BEGIN SET SELF.nyelv = n1; SET SELF.szint = n2+1; RETURN SELF; END

38 Saját konverziós metódus CREATE TYPE nyelvismeret AS ( nyelvVARCHAR(20), szintINTEGER ) CREATE FUNCTION konv ( ni nyelvismeret) RETURNS CHAR(20) BEGIN DECLARE re CHAR(20); SET re = ni.nyelv || CAST(ni.szint AS CHAR(5)); RETURN re; END CREATE CAST (nyelvismeret AS CHAR(20)) WITH konv

39 Örökléshez kapcsolódó elemek CREATE TYPE os AS ( ) CREATE TYPE al UNDER os AS () DECLARE v1 os; SET v1 = NEW os(); SET v1 = NEW al(); DECLARE v1 al; SET v1 = NEW al(); helyettesíthetőség elve A strukturált UDT-k példányai értékek és nem objektumok NEW os() NEW os(paramlista) példány létrehozás

40 metódusok kezelése CREATE TYPE dolgozo AS ( METHOD elszamol() RETURNS BOOLEAN, METHOD novel() RETURNS INTEGER ) CREATE TYPE oktato UNDER dolgozo AS ( METHOD novel() RETURNS INTEGER, METHOD novel(IN ert INTEGER) RETURNS INTEGER ) öröklés overloading overriding SET x = (gabi AS dolgozo).novel() SET x = TREAT (gabi AS dolgozo).novel()

41 Integritási elemek megadása az UDT táblákban CREATE TABLE táblanév UNDER tnev OF típus ( ref-szerkezet | tábla-interitás | mező-integritás ) CREATE TYPE DIAK AS ( NEV VARCHAR(30), SZDAT SZEV) CREATE TABLE s_v OF diak ( REF IS diak_id SYSTEM GENERATED szdat WITH OPTIONS o_1 CHECK szdat < SYSDATE nev WITH DEFAULT VALUE ‘PETER’

42 UDT táblák lekérdezése alapesetben a hierarchiában végig lekérdez CREATE TABLE A OF T1A CREATE TABLE B UNDER A OF TB SELECT * FROM B leszűkítés SELECT * FROM ONLY (B) A view-k között is értelmezhető hierarchia CREATE VIEW v1 OF t1 (REF IS DERIVED) AS SELECT… CREATE VIEW v2 OF t2 UNDER v1 AS SELECT … szigorú illeszkedési feltételek

43 CREATE TYPE VERSENYZO_T AS ( NEVCHAR(20), LAKCIM LAKCIM_T, CSAPAT REF(CSAPAT_T), SZULIDO DATE, PONTOK ROW ( DATUM DATE, PONTSZAM INTEGER ARRAY[3] ) NOT FINAL INSTANTIABLE INSTANCE METHOD ELETKOR () RETURNS INTEGER; CREATE INSTANCE METHOD ELETKOR () RETURNS INTEGER FOR VERSENYZO_t RETURN YEAR(SYSDATE) - YEAR(SELF.SZULIDO);


Letölteni ppt "Objektum relációs adatmodell. RDBMS OOP SDM ORDBMS OODBMS OOPPD Objektum orientált adatmodellek Heterogén megközelítés : mit jelent az OODB ?"

Hasonló előadás


Google Hirdetések