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

Hasonló előadás


Az előadások a következő témára: "Objektum relációs adatmodell"— Előadás másolata:

1 Objektum relációs adatmodell

2 Objektum orientált adatmodellek
RDBMS OOP OOPPD ORDBMS OODBMS SDM 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 ODL kapcsolatok atomi típusok struktúra halmaz multihalmaz tömb lista 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 class interface literal interface onév : ős-i{ } struct onév : ős-o { } class onév EXTENDS ős – o : ős-i (extent enev) { } extent : osztály objektumainak halmaza

8 típusok megadása Atomi típusok: integer, float, character, string, boolean - Komplex típusok: Set(...) Bag(...) List(...) Array(...) Struct(...)  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) )  

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<Section> has_sections inverse Section::is_section_of; relationship Set<Course> has_prerequisites inverse Course::is_prerequisite_for; relationship Set<Course> 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 azonosító név: név : kifejezés 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()

12 select m.year from Movies m where m.title = "Gone With the Wind"
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 from (select m from Movies m where m.ownedBy.name = "Disney") d,
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 where s.name = "Harrison Ford") except from Movies m
(select distinct m from Movies m, m.stars s where s.name = "Harrison Ford") except from Movies m where m.ownedBy.name = "Disney") 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

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

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 nagyobb tervezési munka, az összetett szerkezetek és azok viszonyát is fel kell fedezni 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); 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 SQL1999 1975: 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 megkülönböztető elemi típus
saját adattípusok érték struktúra típus 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 SZEV, TM FROM DIAKOK WHERE TM > 180 OR SZEV < 10*TM; megoldás SELECT 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] gyári rugalmasan konstruálható típus : UDT

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 ( VAROS CHAR(20), HSZ INTEGER ), 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); SET nyelv = NEW NYELVISMERET(nyelv.nyelvi,3); SET nyelv = nyelv.szint(3); 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 ( mm REF (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 ( 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ás függvény metó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 CREATE TYPE otip .. ( struktúra )
[OVERRIDING] STATIC | INSTANCE | CONSTRUCTOR METHOD mnév (par.lista) RETURNS tipus LANGUAGE SQL | C … CREATE INSTANCE | STATIC | CONSTRUCTOR METHOD mnév(..) RETURNS tipus FOR otip BEGIN sql vagy külső RETURN … END SELECT m1.m2.mnév() FROM …

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 ( nyelv VARCHAR(20), szint INTEGER ) 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 ( nyelv VARCHAR(20), szint INTEGER ) 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 () A strukturált UDT-k példányai értékek és nem objektumok NEW os() NEW os(paramlista) példány létrehozás DECLARE v1 os; SET v1 = NEW os(); SET v1 = NEW al(); helyettesíthetőség elve helyettesíthetőség: minden ős osztályú hivatkozáskor egy al-osztályú példány is megadható DECLARE v1 al; SET v1 = NEW al();

40 CREATE TYPE dolgozo AS ( METHOD elszamol() RETURNS BOOLEAN,
metódusok kezelése öröklés overloading overriding 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 OVERLOAD: ELTÉRŐ PARAMÉTEREZÉS TREAT : NEM VALTOZTATJ A MEG AZ ADATTÍPUST OVERRIDE: ELTÉRŐ HIERARCHIA (ALAPTIPUS) 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
CREATE TABLE A OF T1A CREATE TABLE B UNDER A OF TB alapesetben a hierarchiában végig lekérdez 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 (
NEV CHAR(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"

Hasonló előadás


Google Hirdetések