ODMG OQL. Jan Forch. Dotazovací jazyky, MFF UK

Podobné dokumenty
OQL. Jakub Kýpeť, Ondřej Heřmánek

OQL. (Object Query Language) Michal Bartoš Filip Bureš

Object Query Language. Daniel Fromek Miroslav Novotný

Analýza a modelování dat. Přednáška 5

OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

KIV/ZIS cvičení 5. Tomáš Potužák

Úvod do databázových systémů

Databázové systémy I

Úvod do databázových systémů

Dolování v objektových datech. Ivana Rudolfová

Databáze SQL SELECT. David Hoksza

Nerelační databázové modely. Helena Palovská

Operátory ROLLUP a CUBE

Databáze I. Přednáška 6

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Dotazování v relačním modelu a SQL

12. Postrelační databázové systémy

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

12. Postrelační databázové systémy

Úvod do databázových systémů

Úvod do programovacích jazyků (Java)

PB161 Programování v jazyce C++ Přednáška 7

Databáze I. Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

6. blok část C Množinové operátory

Generické programování

Dědění, polymorfismus

Databázové systémy. Cvičení 6: SQL

PB161 Programování v jazyce C++ Přednáška 9

Informační systémy ve zdravotnictví. 8. cvičení

typová konverze typová inference

6. blok část B Vnořené dotazy

PŘETĚŽOVÁNÍ OPERÁTORŮ

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Databázové systémy. Dotazovací jazyk SQL - II

8.2 Používání a tvorba databází

Paměť počítače. alg2 1

PRG036 Technologie XML

Informační systémy ve zdravotnictví. 6. cvičení

Objektově orientované databáze. Miroslav Beneš

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Tvorba informačních systémů

Ukládání a vyhledávání XML dat

PROSTOROVÉ DOTAZOVACÍ JAZYKY. (Maroš Kasinec, Jakub Kúdela)

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Databázové systémy Cvičení 5

6 Objektově-orientovaný vývoj programového vybavení

Tvorba informačních systémů

Programovací jazyk Pascal

Databáze 2011/2012 SQL SELECT II. RNDr.David Hoksza, Ph.D.

Kapitola 4: SQL. Základní struktura

Úvod do databázových systémů

XQuery: dotazovací jazyk nad XML

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Databázové systémy Cvičení 5.2

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

Objektové programování

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

5 Přehled operátorů, příkazy, přetypování

KMA/PDB. Karel Janečka. Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Funkcionální programování. Kristýna Kaslová

Seminář Java II p.1/43

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

XQuery. Jirka Kosek. Visual FoxPro DevCon června Praha. Copyright 2005 Jiří Kosek

Základy objektové orientace I. Únor 2010

Databázové systémy Tomáš Skopal

1. Dědičnost a polymorfismus

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

PB161 Základy OOP. Tomáš Brukner

Teoretické minimum z PJV

Algoritmizace a programování

PRG036 Technologie XML

Formální sémantika SQL dotazování

Dotazovací jazyky I. Datová krychle. Soběslav Benda

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Algoritmizace a programování

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

UML. Unified Modeling Language. Součásti UML

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Objektové databáze. Martin Švec. 1. července 2003

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Programování v C++ 1, 6. cvičení

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Základní přehled SQL příkazů

KIV/ZIS - SELECT, opakování

Sada 1 - PHP. 03. Proměnné, konstanty

Programování v C++ 2, 4. cvičení

Analýza a modelování dat. Přednáška 8

Transkript:

ODMG OQL Jan Forch Dotazovací jazyky, MFF UK

Obsah Objektově orientované databáze Úvod do ODMG-93 Motivace Idea Datový model OQL Gramatika OQL Literatura Dotazy 2 Jan Forch - ODMG OQL

Objektově orientované databáze Objektový datový model V souladu s viděním světa (entita objekt) Definice složitých objektů a jejich manipulace OOSŘBD 3 Jan Forch - ODMG OQL

Úvod do ODMG-93 - historie 1993: konsorcium vůdčích výrobců OOSŘBD návrh standardu ODMG-93. Nadmnožina obecnějšího modelu Common Object Model (COM) vytvořeného skupinou OMG. Převzat byl jeho definiční jazyk IDL. Dotazovací část Object Query Language (OQL), která souvisí s koncepcí dotazovací části standardu SQL92. Rozhraní k OO PJ C++, Smalltalk (k Java: nahrazeno Java Data Objects (JDO)) 2001: skupina rozpuštěna (verze ODMG 3.0) OOPJ + SŘBD = OOSŘBD 4 Jan Forch - ODMG OQL

Úvod do ODMG-93 Třída (nebo typ), instance (nebo objekt), atribut, metoda a integritní omezení Třída - šablona pro instance (objekty), které mohou sdílet atributy a metody. Doména atributů: primitivní typ dat, abstraktní typ dat (ADT), nebo odkaz na třídu. Metoda je funkce (její implementace je skryta) aplikovatelná na instance třídy (výpočet založený na hodnotách atributů). Identifikátor objektu (OID) Každý objekt má jednoznačný identifikátor, prostřednictvím kterého lze z databáze získat odpovídající objekt. 5 Jan Forch - ODMG OQL

Idea Zapouzdření Data jsou zabalena spolu s metodami. Jednotkou zapouzdření je objekt. Metody jsou platné pouze na příslušných objektech, se kterými jsou zapouzdřeny. hierarchie tříd, dědění Podtřída hierarchie Dědění je proces znamenající pro podtřídu osvojení všech atributů a metod z nadtřídy. Vícenásobné dědění ( problémy např. řešení konfliktů stejných jmen zděděných atributů a metod). 6 Jan Forch - ODMG OQL

Datový model - standard ODMG (Object Data Management Group) standard pokrývá: Objektový model ODL (Object definition language), pro objektový model a jeho syntax, verze ODL pro C++ a Smalltalk OQL (Object query language) pro objektový model Propojení s C++, umožňující programům v C++ operovat nad databázemi splňující standard Propojení se SmallTalkem umožňující programům ve Smalltalku operovat nad databázemi splňující standard 7 Jan Forch - ODMG OQL

Datový model objektový model Objektový model ODMG je podporován ODMGcompliant object data management systems (ODBMS) Pokrývá: Charakteristiku objektů Jak spolu mohou objekty vzájemně souviset Jak mohou být objekty pojmenované a identifikované 8 Jan Forch - ODMG OQL

Datový model objektový model - požadavky Objektový model specifikuje tyto konstrukce: Základní modelovací primitiva jsou objekty a literály každý objekt má unikátní identifikátor. Literály nemají žádný identifikátor Objekty a literály jsou kategorizovány pomocí jejich typů Stavy objektů jsou definovány hodnotami jejich atributů Chování objektu je definováno množinou operací, které mohou být vykonány na jeho instancích nebo přímo instancemi samotnými ODMS ukládá objekty a umožňuje jejich sdílení více uživateli ODMS je založeno na datovém schématu ODMG a obsahuje instance objektů typů definovaných objektovým schématem ODMG 9 Jan Forch - ODMG OQL

Datový model - OQL Dotazovací jazyk nad objekty podle standardu ODMG Velmi podobný SQL Klausule select, from, where, group by, použity podobně jako v SQL (příklady později) Volnější syntaxe -> jednodušší gramatika 10 Jan Forch - ODMG OQL

Datový model - standard ODMG objektový model podporuje. Zápis tříd, objektů s atributy a metodami Dědičnost Klasické typy používané v databázích (string, date, ) Podporuje zápis vztahů pomocí mechanismu referencí Kolekce (set, list, ) Třídy použité pro praktickou realizaci spojení ODL a C++ importovány do zdrojových souborů jako knihovna 11 Jan Forch - ODMG OQL

Datový model příklad C++ class Person{ d_string name; d_date birthdate; d_set < d_ref<person> > parents inverse children; d_list < d_ref<person> > children inverse parents; d_ref<apartment> lives_in inverse is_used_by; }; Person(); int age(); void marriage( d_ref<person> spouse); void birth( d_ref<person> child); d_set< d_ref<person> > ancestors;; virtual d_set<d_string> activities(); 12 Jan Forch - ODMG OQL

Datový model - příklad C++ class Employee: Person{ float salary; }; virtual d_set<d_string> activities(); class Student: Person{ d_string grade; }; virtual d_set<d_string> activities(); 13 Jan Forch - ODMG OQL

Datový model - příklad C++ class Address{ int number; d_string street; }; class Building{ Address address; d_list< <d_ref<apartment> > apartments inverse building; d_ref<apartment> less_expensive(); }; class Apartment{ int number; d_ref<building> building; d_ref<person> is_used_by inverse lives_in; }; d_set< d_ref<person> > Persons; d_set< d_ref<apartment> > Apartments; d_set< d_ref<apartment> > Vacancy; d_list< d_ref<apartment> > Directory; }; 14 Jan Forch - ODMG OQL

OQL - principy OQL je založen na objektovém modelu ODMG OQL je nadmnožina dotazovací části SQL což umožňuje použití OQL pro dotazování nad databází Jakýkoliv dotaz, který funguje na relační databázi funguje i nad OQL Rozšíření zahrnují značení pro objektově orientovaný přístup k datům, identitu objektů, vyjádření cesty k datům tečkovou notací, polymorfismus, volání operací, pozdní vazbu v případě použití polymorfických struktur OQL poskytuje primitiva pro práci s kolekcemi (množinami, multi-množinami, seznamy, poli) 15 Jan Forch - ODMG OQL

OQL - principy OQL je funkcionální jazyk, kde operátory mohou být volně používány a spojovány pokud jejich operandy dodržují očekávaný typ operátorů To je důsledek toho, že jakýkoliv výsledek dotazu v OQL odpovídá standardu ODMG, a tudíž nad ním může být volán další dotaz OQL není výpočetně úplný jazyk, je to jednoduchý dotazovací jazyk pro přístup do objektových databází OQL může být voláno přímo z programů napsaných v jazyce, pro které je definován ODMG binding (C++, SmallTalk) Naopak OQL může volat operace napsané v těchto jazycích 16 Jan Forch - ODMG OQL

OQL - principy OQL neposkytuje explicitní aktualizační operátory ale raději používá volání operací definovaných pro tento účel přímo na objektech Neporušuje sémantiku objektové databáze, která je podle definice spravovaná pomocí metod definovaných na objektech Dotazy OQL jsou výrazy sestavené pomocí typovaných operandů spojených rekurzivně do dotazu pomocí operátorů 17 Jan Forch - ODMG OQL

OQL základy syntaxe Spojení funkcionálního programování, SQL a OO programovacího jazyka (C++) Dále popis syntaxe OQL ve formátu popis jednotlivé funkcionality podporované OQL + příklad 18 Jan Forch - ODMG OQL

OQL přístup k atributům p.lives_in.building.adddress.street Přístup k atributům a metodám objektů pomocí. a -> notace Přístupy je možno řetězit libovolně za sebe p je instance třídy Person 19 Jan Forch - ODMG OQL

OQL atomické literály Literály v OQL mají obvyklý význam Objektový literál: nil Logický literál: false, true Integer literál: sekvence číslic, např. 27 Float literál: např. 3.14 nebo 314.16e-2 Znakový literál: znak mezi apostrofy, např. z Řetězcový literál: řetězec mezi uvozovkami např.,"a string" 20 Jan Forch - ODMG OQL

OQL select, from select c.name from c in p.children Klasický tvar dotazu Dotaz: Vrať jména dětí osoby p select distinct c.name from c in p.children Eliminace duplicit ve výsledku select c.lives_in.building.address from p in Persons, c in p.children V OQL může kolekce ve from části dotazu dědit od předchozí kolekce použitím cesty, která začíná v položce předchozí kolekce p se v tomto kontextu nazývá iterátorem 21 Jan Forch - ODMG OQL

OQL formát výsledku dotazu select může vracet záznamy ve formě seznamu, množiny, multi-množiny, pole Implicitní forma je multi-množina (Bag) Záznamy se mohou opakovat Použitím klíčového slova distinct se změní forma výsledku na množinu (Set) Pořadí prvků při procházení je nedefinováno Použitím klíčového slova order by v dotazu se změní forma výsledku na seznam (List) Pořadí definováno tělem order by sekce dotazu 22 Jan Forch - ODMG OQL

OQL where select c.lives_in.building.address from p in Persons, where c in p.children p.lives_in.building.address.street = "Main Street" and count(p.children) >= 2 and c.lives_in!= p.lives_in where klauzule realizována predikátem, který eliminuje nevyhovující záznamy Dotaz: Vrať adresy dětí rodičů majících trvalé bydliště na "Main Street, kteří mají alespoň 2 děti, kde dítě bydlí jinde než rodič 23 Jan Forch - ODMG OQL

OQL join select p from p in Persons, b in (select distinct a.building from a in Apartments) where p.name = b.address.street Spojení lze provést i mezi entitami, které nejsou provázány přímo na objektové úrovni Pomocí vnořeného dotazu Dotaz: Vrať osoby se jménem stejným jako ulice, na které se nachází některý z bytů 24 Jan Forch - ODMG OQL

OQL manipulace s daty select struct(me: p.name, from p in Persons my_address: p.lives_in.building.address, my_children: (select struct(name: c.name, from c in p.children)) address: c.lives_in.building.address) Když potřebujeme výsledná data zformátovat do určité datové struktury Klíčové slovo struct slouží k označení sekce s definicí struktury Struktury mohou být libovolně zanořené do sebe viz. příklad 25 Jan Forch - ODMG OQL

OQL volání metod OQL dovoluje volat metody s/bez parametrů kdekoliv, kde výsledný typ metody odpovídá požadovanému typu v dotazu V případě, že metoda nemá žádné parametry, její volání se neliší od přístupu k atributům objektu Tento volný syntax uvolňuje práci jazykem (Uživatel nemusí vědět, zda je daná hodnota přímo atributem, či zda je spočítaná.) select max(select c.age from c in p.children) from p in Persons, where p.name = "Paul" 26 Jan Forch - ODMG OQL

OQL polymorfismus Hlavním přínosem objektové technologie je možnost manipulace s polymorfickými strukturami Příklad: třídy Person, Employee, Student Každá má jinou implementaci metody activities() vracející aktivity typické pro daný typ osoby select p.activities from p in Persons Persons je pole polymorfických struktur dědících od třídy Person Při volání daného selectu z příkladu se pokaždé zavolá správná implementace metody activities v závislosti na konkrétním typu instance 27 Jan Forch - ODMG OQL

OQL přetypování Pokud potřebujeme jít v hierarchii tříd níže od předků k potomkům, je možné použít mechanismu přetypování. Interpret OQL musí korektně zkontrolovat, zda daná instance může být přetypována na potomka Motivací je nutnost dostat se k metodám, které jsou v potomkovy implementovány select ((Student)p). grade from p in Persons where "course of study" in p.activities 28 Jan Forch - ODMG OQL

OQL pojmenování výsledků dotazů OQL umožňuje pojmenovat výsledky dotazů Takto pojmenované výsledky je poté možno použít v jiných dotazech jako vstupy define Employees as select (Employee) p from p in Persons where "has a job" in p.activities define salary_map as select street, average_salary: avg (select p.e.salary from partition p) from e in Employees group by e.lives_in.building.address.street 29 Jan Forch - ODMG OQL

OQL testování na nil Poté co uživatelská aplikace změní data v OOSŘBD, některé objekty (reference na ně) mohou nabývat hodnoty nil Je možné testovat objekt proti této hodnotě a zjišťovat tak validitu instance objektu select c.name from c in Globe.clients where c!=nil and count (c.order) = 3 Kvůli zjednodušení probíhá tento test v souladu se standardem implicitně, predikát where je v případě nil objektu vyhodnocen vždy na false, záznam je tedy automaticky přeskočen Se stejnou sémantikou je tedy možno psát: select c.name from c in Globe.clients where count (c.order) = 3 30 Jan Forch - ODMG OQL

OQL přístup k prvkům pole Pro přístup k prvkům pole se používá klasická syntaxe ve formátu: Globe.clients[2] 31 Jan Forch - ODMG OQL

OQL vytváření objektů OQL umožňuje vytváření dočasných objektů Atributům je přiřazena hodnota odpovídající položky s parametrů Client (name: "Trent") o2_list_client (list(client(name:"john"), (Client(name:"Jack"))) 32 Jan Forch - ODMG OQL

OQL operátory - count Vrací počet prvků kolekce Parametrem je kolekce, pro níž chceme znát její mohutnost count (Globe.employees) Jedná se o agregační operátor (podobně jako v SQL je možné použít nad řádky agregovanými podle nějaké domény) Podobně se chovají i operátory min, max, sum and avg 33 Jan Forch - ODMG OQL

OQL operátory - element Pokud má uživatel strukturu množiny výsledků dotazu o jednom prvku, může jej přímo extrahovat ze struktury pomocí operátoru element element ( select e from e in Globe.employees where e.name = "Tintin") 34 Jan Forch - ODMG OQL

OQL operátory - exists Existenční operátor ve smyslu predikátové logiky s podobnou sémantikou jako jeho ekvivalent v SQL select c.name from c in TheCompanies where exists e in c.employees: e.age < 23 35 Jan Forch - ODMG OQL

OQL operátory group by Seskupuje dohromady objekty kolekcí se stejnou hodnotou určitých atributů Nad atributy, podle kterých neprobíhá agregace je možno volat ve výsledku dotazu agregační operátory select * from e in Globe.employees group by e.salary Výsledek dotazu je tvaru: bag (struct (salary: real, partition: bag (struct (e:employee)))) První složka struktury je hodnota atributů určité skupiny, přes které se agreguje (plat), druhá složka je ve standardu pojmenovaná partition obsahuje množinu objektů (zaměstnanců) se stejnou hodnotou atributu, přes který se agregovalo (plat) select salary, number: count (partition) from e in Globe.employees group by e.salary having count (partition) > 10 36 Jan Forch - ODMG OQL

OQL operátory having Podobně jako v SQL umožňuje filtrovat agregované skupiny podle hodnot vrácených agregačními operátory select salary, number: count (partition) from e in Globe.employees group by e.salary having count (partition) > 100 37 Jan Forch - ODMG OQL

OQL operátory like Podobně jako v SQL umožňuje porovnávat řetězcové atributy proti zjednodušeným regulárním výrazům select distinct e.salary from e in Globe.employees where e.name like "Sp*" 38 Jan Forch - ODMG OQL

OQL operátory order by Podobně jako v SQL umožňuje řadit výsledky dotazů podle určených atributů select e from e in Globe.employees order by e.name, e.age 39 Jan Forch - ODMG OQL

OQL operátory množinové OQL umožňuje na množiny objektů aplikovat operace sjednocení, průnik, rozdíl + (union) sjednocení * (intersect) průnik - (difference) rozdíl Je možné použít libovolně jak znaménkový tak slovní zápis MyEmployees + YourEmployees Sémantikou operátoru pick je získání libovolného prvku množinové kolekce pick (MyEmployees) 40 Jan Forch - ODMG OQL

OQL konverze list to set OQL umožňuje převádět kolekce (množina, list, ) mezi sebou Důležité v případě nutnosti použití kolekce jako parametru metody či operátoru Očekává parametr určitého typu Funkce listtoset konvertuje list nebo pole na množinu listtoset (Globe.clients) intersect listtoset (TheCompanies[2].clients) Operátor order by použitý v dotazu konvertuje implicitní formát výsledku dotazu (množinu nebo multimnožinu) na seznam (list) select e from e in the_employees order by e.salary Pokud nám jde jen o formát výsledku je možné použít zápis: select e from e in the_employees order by * 41 Jan Forch - ODMG OQL

OQL konverze flatten OQL umožňuje převádět kolekce kolekcí na ploché kolekce pomocí operátoru flatten (spojení obsahu kolekcí do jedné velké) flatten (select distinct c.clients from c in TheCompanies) 42 Jan Forch - ODMG OQL

Gramatika OQL - ukázka OQL je definována pomocí BNF (Backus Naur Form), froma bezkontextové gramtiky query_program ::={define_query;} query define_query ::=define identifier as query query ::= nil query ::= true query ::= false query ::= integer_literal query ::= float_literal query ::= character_literal query ::= string_literal query ::= entry_name query ::= query_name query ::= bind_argument1 query ::= from_variable_name query ::= (query) query ::= query + query2 query ::= query - query query ::= query * query query ::= query / query query ::= - query query ::= query mod query query ::= abs (query) query ::= query query query ::= query comparison_operator query query ::= query like string_literal comparison_operator ::= = comparison_operator ::=!= comparison_operator ::= > comparison_operator ::= < comparison_operator ::= >= 43 Jan Forch - ODMG OQL

Gramatika OQL priorita operátorů Výpis operátorů sestupně podle priority (operátory se stejnou prioritou se vyhodnocují zleva doprava): () []. -> not - (unarní) + (unární) i n * / mod intersect + - union except < > <= >= < some < any < all (atd.... pro všechny porovnávací operátory) =!= like and exists for all or.. :, (identifikátor) operátor přetypování order having group by where from select 44 Jan Forch - ODMG OQL

Literartura ODMG OQL User Manual Release 5.0 February 1998 The Object Data Standart: ODMG 3.0 (R.G.G Catell, Douglas K. Barry) 45 Jan Forch - ODMG OQL

Otázky??? 46 Jan Forch - ODMG OQL