+ All Categories
Home > Documents > Objektové databáze a OQL

Objektové databáze a OQL

Date post: 14-Jan-2016
Category:
Upload: curt
View: 64 times
Download: 0 times
Share this document with a friend
Description:
Objektové databáze a OQL. Jakub Kotrla Ondřej Kmoch Vlastimil Menčík. Obsah. ODMG objektový model jazyky pro specifikace objektů mapování modelu do programovacích jazyků OQL. Historie ODMG. počátky práce v roce 1991 ODMG 1.0 v roce 1993 ODMG 3.0 v roce 2000 - PowerPoint PPT Presentation
97
Objektové databáze a OQL Jakub Kotrla Ondřej Kmoch Vlastimil Menčík
Transcript
Page 1: Objektové databáze a OQL

Objektové databáze a OQL

Jakub KotrlaOndřej Kmoch

Vlastimil Menčík

Page 2: Objektové databáze a OQL

Obsah

• ODMG objektový model• jazyky pro specifikace objektů• mapování modelu do programovacích

jazyků• OQL

Page 3: Objektové databáze a OQL

Historie ODMG

• počátky práce v roce 1991• ODMG 1.0 v roce 1993• ODMG 3.0 v roce 2000• v roce 2001 pracovní skupina rozpuštěna

Page 4: Objektové databáze a OQL
Page 5: Objektové databáze a OQL

Objektový model ODMG

• vychází z objektového modelu OMG• definuje, co to jsou objekty, literály,

typy, atributy, operace, vztahy apod.• designér aplikace používá objektový model

ODMG k vytvoření objektového modelu aplikace

• výsledkem je ODMS schéma pro konkrétní aplikaci (v ODL)

Page 6: Objektové databáze a OQL

Základy objektového modelu

• primitiva object, literal• jsou nějakého typu

– objekt (objektový typ), instance typu– literál (literálový typ), literál („proměnná“)

• rozsah stavů objektu – množina vlastností(atributy a vztahy k jiným objektům)

• stav objektu - hodnoty vlastností• chování objektu - množina operací

Page 7: Objektové databáze a OQL

Typy – externí specifikace typu

• jen jedna• popisuje typ zvenku pro uživatele typu• implementačně nezávislá• definuje vlastnosti, operace a výjimky,

které mohou operace vyhodit

• definice rozhraní (interface) – operace objektového typu• definice třídy (class) – stav a operace objektového typu• definice literálu (literal) – stav literálového typu

Page 8: Objektové databáze a OQL

Rozhraní, třída, literál

Rozhraní Třída Literál

Chování - operace

Stav -vlastnosti

Page 9: Objektové databáze a OQL

Typy – implementace typu

• jedna či více• reprezentace - mapování vlastností

objektu do programovacího jazyka• metody - těla/kód funkcí

• interní metody• mapování literálových typů

Page 10: Objektové databáze a OQL

Dědičnost

• ISA vztah• jen chování objektu – předek může být jen

rozhraní• vícenásobná• polymorfismus

• interface Prijimac {…};interface Vysilac {…};class Vysilacka : Prijimac, Vysilac {…};

Page 11: Objektové databáze a OQL

EXTEND

• dědění stavu i chování objektu• jednoduchá dědičnost mezi dvěma třídami

• class Osoba {…};class Zamestnanec : Osoba {…};

Page 12: Objektové databáze a OQL

Extent typu

• množina všech instancí daného typu v rámci jednoho ODMS

• je udržována volitelně• reflektuje dědičnost typů

(Extent podtypu je podmnožina extentu typu)

Page 13: Objektové databáze a OQL

Klíče

• vlastnost jednoznačně určující instanci• analogie z relačního modelu

• jednoduché (single) - jedna vlastnost• složené (compound) – množina více

vlastností

Page 14: Objektové databáze a OQL

Hierarchie typů

Literal_type

Object_type

Atomic_literal (short, long long, boolean, char…)

Collection_literal (set<>, bag<>, list<>, array<>, dictionary<>)

Structured_literal (date, time, timestamp, interval, structure<>)

Atomic_object – definovány uživatelem

Collection_object (Set<>, Bag<>, List<>, Array<>, Dictionary<>)

Structured_object (date, time, timestamp, interval)

Page 15: Objektové databáze a OQL

Objekty

• vytváření pomocí factory interface - new (součást mapování jazyka)

• základní rozhraní:interface Object {

enum Lock_Type(read, write, upgrade);void lock(in Loct>Type mode raises(LockNotGtranted);boolean try_lock(in Lock_Type mode);boolean same_as(in Object anObject);Object copy();void delete();

}

Page 16: Objektové databáze a OQL

Objekty - identifikace

• každý objekt má svůj identifikátor, jedinečný v rámci ODMS

• stálý – během života objektu se nezmění• generován ODMS• Používán v operaci Object::same_as()

• objekt může mít i jméno – označení pro programátora/uživatele

Page 17: Objektové databáze a OQL

Životnost objektů

• Přechodná– pouze v paměti, zajišťuje runtime

programovacího jazyka

• Trvalá– v paměti a trvalém úložišti, zajišťuje ODMS

• nezávisí na typu objektu

Page 18: Objektové databáze a OQL

Atomic_object

• uživatelem definovaný typ• ODMG nemá žádný vestavěný

Page 19: Objektové databáze a OQL

Collection_object

• kolekce prvků (atomický typ, jiná kolekce či literálový typ)

• prvky musí být stejného typu• vytváření new, new_of_size• procházení iterátorem• metody insert_element, remove_element apod.• metody query, select apod. pro výběr prvků

pomocí OQL

Page 20: Objektové databáze a OQL

Collection_object (2.)

• set<> - množina• bag<> - umožňuje duplicity• list<> - setříděná posloupnost• array<> - dynamické pole• dictionary<> - množina párů klíč-hodnota

Page 21: Objektové databáze a OQL

Structured_object

• implementuje základní rozhraní - Object

• Date• Time• Timestamp• Interval

• Mnoho konstruktorů a formátovacích metod

Page 22: Objektové databáze a OQL

Literály

• nemají jednoznačný identifikátor – vždy předávány hodnotou

• operace equal – obdoba same_as u objektů– oba atomické a mají stejnou hodnotu– oba stejná kolekce a stejné (equal/same_as)

prvky se smyslu dané kolekce– oba struktura stejného typu, shodná

(equal/same_as) ve všech prvcích

Page 23: Objektové databáze a OQL

Atomic_literal

• long• long long• short• unsigned long• unsigned short• float• double• boolean• octet• char• string• enum

• jsou součástí OMG IDL• jsou mapovány do

programovacího jazyka jako typ či zvláštní třída

• enum:attribute enum gender {male,female}

Page 24: Objektové databáze a OQL

Collection_literal

• obdoba Collection_object ale nemá identifikátor objektu (object idetinfier)

• prvky mohou být objekty i literály• set<>, bag<>, list<>, array<>,

dictionary<>

Page 25: Objektové databáze a OQL

Structured_literal

• struktura, položkou může být objekt i literál

• vestavěné:– date– time– timestamp– interval

• struct Address {stringstreet_name;short house_no;

};

Page 26: Objektové databáze a OQL

Stav objektu - atributy

• objekty nebo literály

• class Person {attribute short age;attribute enum gender {male,

female};attribute Address home_address;attribute set<Phone_no> phones;

};

Page 27: Objektové databáze a OQL

Stav objektu - vztahy

• pouze binární – mezi dvěma objekty• definovány pomocí traversal path

– vždy v páru– pojmenované

• class Teacher {relationship set<Course> teaches inverse

Course::is_taught_by;}; class Course {

relationship Teacher is_taught_by inverse Teacher::teaches;};

Page 28: Objektové databáze a OQL

Stav objektu – vztahy (2.)

• kardinalitu určuje typ (… set<Course> … )• atribut objektového typu není vztah

(není zaručena integrita)• integritu zajišťuje ODMS• travesal path není ukazatel• jejich implementace je schována do

operací:– form/drop– add/remove

Page 29: Objektové databáze a OQL

Stav objektu – vztahy (3.)

• relationship X Y inverse Zattribute X Y;void form_Y(in X target) raises (IntegrityError);void drop_Y(in X target) raises (IntegrityError);

• relationship set<X> Y inverse Zattribute set<X> Y;void form_Y(in X target) raises (IntegrityError);void drop_Y(in X target) raises (IntegrityError);void add_Y(in X target) raises (IntegrityError);void remove_Y(in X target) raises (IntegrityError);

Page 30: Objektové databáze a OQL

Chování objektu - operace

• množina operací– jméno– jména a typy argumentů (a modifikátory

in/out)– jméno a typ návratové hodnoty– jména výjimek, které může vyhodit

• operace je definována pro právě jeden typ– žádné globální operace– žádné operace nad dvěma a více typy

Page 31: Objektové databáze a OQL

Chování objektu – operace (2.)

• jméno operace musí být jedinečné v rámci typu

• různé typy mohou mít stejně pojmenované operace – přetížení jmen

• výběr použité operace se řídí pouze typem prvního argumentu (single dispatch model)

• ODMG nedefinuje paralelní běh operací

Page 32: Objektové databáze a OQL

Výjimky

• operace mohou vyhodit výjimku• zpracuje ji exception handler

– jako argument dostane objekt exception s podrobnějšími informacemi

– funguje polymorfismus

• Runtime uvolní paměť a zruší započaté transakce

Page 33: Objektové databáze a OQL

Metadata

• informace o trvalých objektech• popisují schéma ODMS

– struktura úložiště objektů– zpřístupňuje trvalé objekty

• uložena v ODL Schema Repository(obdoba IDL Interface Repository)

Page 34: Objektové databáze a OQL

Metadata (2.)

• Součástí ODMG je popis rozhraní definujících vnitřní strukturu ODL Schema Repository– Scope– Visitor– MetaObject

• Module• Operation• Exception• Constant• Property (Attribute, Relationship)• Type (Interface, Class, Collection, ScopedType, Enumeration, ...)

– Specifier, Member, UnionCase, Direction– Operand

Page 35: Objektové databáze a OQL

Metadata (3.)

• interface Class : Interface {attribute list<string> extents;attribute list<string> keys;relationship Class extender

inverse Class::extensions;relationship set<Class> extenions

inverse Class::extender;};

• interface Operation : MetaObject, Scope{relationship list<Parameter> signature

inverse Parameter::operation;relationship Type result

inverse Type::operations;relationship list<Exception> exceptions

inverse Exception::operations;};

Page 36: Objektové databáze a OQL

Obsah druhé části

• transakce a zámykání• jazyky pro specifikace objektů• mapování standardu do programovacích

jazyků– C++ a Java

• ODMG a JDO• objektově-relační mapování• příklad

Page 37: Objektové databáze a OQL

Konkurenční přístup

• řešeno pomocí zamykání– implicitní

• datábázový stroj se sám stará o zamykání čtených a zapisovaných objektů

• netýká se zámků pro změny

– explicitní• zamknutí lze vynutit pomocí konstrukcí lock a

try_lock

Page 38: Objektové databáze a OQL

Druhy zámků

• sdílený zámek (shared)• exkluzivní zámek (exclusive)• zámek pro změny (upgrade)

– zaveden kvůli prevenci uváznutí

Page 39: Objektové databáze a OQL

Konflikty zámků

nastavený zámek na objektu

žádný shared exclusive upgrade

shared ok ok X ok

exclusive ok X X X

upgrade ok ok X Xpoža

dova

ný z

ámek

Page 40: Objektové databáze a OQL

Uvolňování zámků

• všechny zámky jsou standardně automaticky uvolněny po ukončení transakce (commit nebo abort)

• tato strategie je v souladu s definicí izolace úroveň 3 podle standardu SQL-92– nemůže dojít k těmto jevům

• dirty reads• nonrepeatable reads • phantoms

Page 41: Objektové databáze a OQL

Transakce

• používají právě zámky• jakákoli operace nad perzistentními daty

musí být spojena s aktivní transakcí• zaručení ACID

– mezi transakcemi (ne nutně mezi procesy a vlákny)

• distribuované transakce– převzato ze standardu ISO XA– používáno pouze transakčními monitory– implementace nemusí podporovat

distribuované transakce

Page 42: Objektové databáze a OQL

Rozhraní pro transakce

interface TransactionFactory {Transaction new();Transaction current();

}

interface Transaction {void begin() raises(TransactionInProgress, DatabaseClosed);void commit() raises(TransactionNotInProgress);void abort() raises(TransactionNotInProgress);void checkpoint () raises(TransactionNotInProgress); void join() raises(TransactionNotInProgress); void leave() raises(TransactionNotInProgress); boolean isOpen();

}

Page 43: Objektové databáze a OQL

Práce s transakcemi

• begin = nová transakce není otevřená, je ji nutno explicitně otevřít

• checkpoint = jsou uloženy změny, ale transakce zůstává otevřená– zámky nejsou uvolněny

• join = umožňuje připojit proces k cizí aktivní transakci jiného procesu nebo vlákna– taková transakce potom nezajišťuje izolaci

mezi těmito procesy (vlákny)

Page 44: Objektové databáze a OQL

Jazyky pro specifikace objektů

• Object Definition Language (ODL)– jazyk pro definice objektů v databázi

• Object Interchange Format (OIL)– specifikace formátu pro výměnu objektů mezi

různými databázemi

Page 45: Objektové databáze a OQL

ODL

• úplně popisuje objektový model ODMG• není to programovací jazyk, jen jazyk pro

definice• nezávislý na programovacím jazyce• vychází z IDL (Interface Definition Lang.)• byl navržen jako jednoduše a rychle

implementovatelný

Page 46: Objektové databáze a OQL

ODL jako rozšíření IDL

• IDL– syntaxe vychází z C++– vytvořen pro potřeby projektu CORBA– popisuje objektový model OMG

• ODL– rozšíření konstruktů, aby pokryl celý objektový

model ODMG (viz. dále srovnání objektového modelu ODMG a OMG)

Page 47: Objektové databáze a OQL

Mapování ODL

• ve standardu je navrženo mapování– z jiných jazyků do ODL

• například z SQL99

– z ODL do jiných jazyků• Java, C++, SQL99, Smalltalk

ODL

Page 48: Objektové databáze a OQL

Příklad ODLmodule Example1 {

class Person( extent persons){

exception NoSuchPerson{};attribute string name;attribute struct Address {

string street;unsigned short number;string city_name} address;

attribute set<string> degrees;relationship Person spouse

inverse Person::spouse;relationship set<Person> children

inverse Person::parents;relationship list<Person> parents

inverse Person::children;boolean marriage(in string person_name)

raises (NoSuchPerson); };};

Page 49: Objektové databáze a OQL

Příklad ODL

• extent– je to množina všech objektů daného typu v

databázi (často následně použito v OQL)

• ODL definuje celé rozhraní objektu– třídy, atributy, metody, výjimky

• definice není závislá na programovacím jazyce

Page 50: Objektové databáze a OQL

OIL

• byl to pokus, popsat objektová data nezávisle na platformě

• vytvořen pro standardní export a import dat databáze

• dnes asi nejméně používaná věc z celého standardu

Page 51: Objektové databáze a OQL

Příklad OIL

Sarah Person{Name “Sarah”,PersonAddress{Street “Willow Road”,

City “New York”,Phone {CountryCode 1,

AreaCode 415,PersonCode 1234}}}

Page 52: Objektové databáze a OQL

OIL

• jméno objektu musí být unikátní v celém objektu OIF

• cyklické použití jména není dovoleno• relace mezi objekty jsou popsány pomocí

jmen• umožňuje fyzicky seskupovat objekty

– tzn. aby byly fyzicky uloženy blízko sebe v DB (clustering)

– nemusí být implementací podporováno

Page 53: Objektové databáze a OQL

Mapování ODMG

• popisuje použití standardu v různých programovací jazycích– C++– Java– Smalltalk

Page 54: Objektové databáze a OQL

ODMG a C++

Deklarace v ODL

ODL preprocesor

Vygenerované hlavičkové

soubory

C++ kompilátor

Soubory zdrojového kódu implementace

LinkerODMSruntime

Spustitelná aplikace

Databáze

Metadata

Page 55: Objektové databáze a OQL

ODMG a C++ (2.)

• příklady– definuje třídy pro kolekce– definuje třídu string– definuje třídy pro přístup k metadatům (jak

zjistit popis o jednotlivých třídách definovaných v DB)

• nejpropracovanější mapování v celém standardu

Page 56: Objektové databáze a OQL

ODMG a Java

„Programátor musí věřit, že existuje pouze jeden jazyk pro programování

i pro vyjádření operací nad databází.“

Page 57: Objektové databáze a OQL

ODMG a Java (2.)

• je použit objektový model z Javy• je plně zahrnuta syntaxe jazyka Java• automatické uložení objektu do databáze,

pokud se na něj odkazuje jiný perzistentní objekt (perzistence řízená dosahem)

Page 58: Objektové databáze a OQL

ODMG API

• definováno v balíku org.odmg• každá implementace definuje vlastní

objekt Implementation– lze používat zároveň více implementací– získání implementace by měl být jediný

implementačně závislý kód v aplikaci

Page 59: Objektové databáze a OQL

Rozhraní ODMG v Javě

• Implementation• Transaction• Database

Page 60: Objektové databáze a OQL

Objektový model ODMG v Javě

ODMG Java

objekt objekt

atomický literál primitivy (string, int, …)

strukturovaný literál nejsou

struktura třída se stejnými atributy

Page 61: Objektové databáze a OQL

Příklad relace v Javě (1:m)

public class Department{

Dcollection employees;}

public class Employee{

Department dept;}

Page 62: Objektové databáze a OQL

Poznámky

• rozhraní a abstraktní třídy nelze uložit (nemohou být perzistentní)

• standard jinak pojmenovává kolekce– v podstatě se jedná o kolekce z Javy– přidány některé dílčí metody, nebo

přejmenovány, aby vyhovovaly standardu

• objekt extent a klíče nejsou v Javě zatím podporovány– nelze se na ně v kódu odkazovat

Page 63: Objektové databáze a OQL

Výjimky

• standardní mechanismus jazyka Java– výjimky jsou potomky ODMGException

Page 64: Objektové databáze a OQL

Souhrnně

• Java OML– 100% použit jazyk Java

• Java ODL– standardní definice tříd v jazyce Java (mohou

být generovány z ODL souboru jako v C++)

Page 65: Objektové databáze a OQL

Java ODL

• definuje mapování ODL typů na typový systém Javy

• operace v ODL jsou metody v Javě

Page 66: Objektové databáze a OQL

Java OML a perzistence objektů

• pro svázání objektů s databází používá property file (soubor vlastností)– persistent=capable– transient=[true|false]

• i jednotlivé atributy mohou být transientní

• objekt je vymazán z databáze automaticky pokud není pojmenován, nebo se na něj neodkazuje jiný perzistentní objekt

Page 67: Objektové databáze a OQL

Perzistence objektů

• kořenové objekty– jsou to pojmenované objekty explicitně

ukládané do databáze– od nich začíná perzistence přidružených

objektů– jméno musí být unikátní v celé databázi

Page 68: Objektové databáze a OQL

Transakce

• ukládání a mazání objektů z databáze probíhá uvnitř asociované transakce

Page 69: Objektové databáze a OQL

Java OQL

• OQL je z Javy plně dostupné– rozhraní OQLQuery

Page 70: Objektové databáze a OQL

Další vývoj ODMG

• poslední verze 3.0 z roku 2000• dnes zastaven vývoj tohoto standardu• vychází z něj JDO (Java) a mnoho dalších

prací na téma „perzistentní objekty“• byl použit jako základ pro objektově-

relační mapování (např. OJB)

Page 71: Objektové databáze a OQL

Rozdíly v JDO

• je těsně spojeno s platformou Java• plně podporuje distribuované transakce• plně podporuje EJB• nemá OQL

– obsahuje pouze značně zjednodušený dotazovací jazyk JDOQL, který nepodporuje komplexní dotazy jako OQL

• jednoduše a rychle implementovatelné!

Page 72: Objektové databáze a OQL

Příklad

• ObjectRelational Bridge (OJB)– opensource projekt komunity Apache– vytváří mezivrstvu, která ukládá objektová

data do relační databáze– vlastně vytváří dojem objektové databáze– kromě JDO plně implementuje ODMG 93

(i s OQL)– viz. http://db.apache.org/ojb/

Page 73: Objektové databáze a OQL

Příklad uložení objektu

• namapujeme třídu Product do tabulky v Oraclu

Page 74: Objektové databáze a OQL
Page 75: Objektové databáze a OQL

Mapování třídy do tabulky

Page 76: Objektové databáze a OQL

Připojení do databáze

Page 77: Objektové databáze a OQL

Manipulace s objektem

Page 78: Objektové databáze a OQL

Výsledek

Page 79: Objektové databáze a OQL

Generování deskriptorů

Page 80: Objektové databáze a OQL

Generování deskriptorů (2.)

• AndroMDA = ucelené integrované řešení s plnou podporou pro OJB

Page 81: Objektové databáze a OQL

Objektově-relační mapování

• lze jednoduše využít relační platformy• lze v aplikaci použít jak relační přístup

(SQL), tak objektový přístup (OQL)• nutno generovat mapování (lze

automatizovat například z UML)– je explicitně vidět, kde jsou objekty uloženy

Page 82: Objektové databáze a OQL

Object Query Language in O2

Vlastimil Menčík

Page 83: Objektové databáze a OQL

Je to další X-SQL?

• podobná syntax, ve standardu dokonce nadmnožina SQL

• dotazy nad jiným typem entit• objektově orientovaný, ne objektově

relační• není to extender obohacující SQL o objekty• založen na objektovém modelu ODMG

Page 84: Objektové databáze a OQL

Select … from … where

select e from e in Globe.employees

where e.salary > 10000

select: definuje strukturu výsledku dotazu

from: seznam kolekcí, na kterých se dotaz vyhodnocuje

where: boolský výraz filtrující výsledek

Page 85: Objektové databáze a OQL

from

... from e in Globe.employees …

• Globe.employees je kolekce, ne tabulka

• proměnná e reprezentuje elementy kolekce a umožňuje přístup k atributům

… where e.salary > 10000

Page 86: Objektové databáze a OQL

Spojení

select e frome in Globe.employees,c in Globe.clients

where e.name = c.name

select ord.what fromcl in Globe.clients, ord in cl.order

where cl.name = “Smith”

Page 87: Objektové databáze a OQL

Struktura výsledku (1)

Výraz za select určuje strukturu a typ výsledku.select e.name, e.position, e.salary

from e in Globe.employees

je vlastněselect struct( name: e.name,

position: e.postition

salary: e.salary)

from e in Globe.employees

Page 88: Objektové databáze a OQL

Struktura výsledku (2)

Záznamy lze i vnořovat:

select struct (employee: struct (name: e.name,

age: e.age),

salary: e.salary)

from e in Globe.employees

where e.position = “Reporter” and

e.age > 22

Page 89: Objektové databáze a OQL

Distinct

select distinct e.salary

from e in Globe.employees

where e.position = “Reporter”

• typ výsledku je set• bez distinct je typ výsledku bag, tedy

multimnožina

Page 90: Objektové databáze a OQL

Group by (1)

select * from e in Globe.employees

group by e.salary

• sémantika stejná jako v SQL• výsledek je typu:

bag (struct (salary: real,

partition: bag (struct (e:Employee))))

• partition je kolekce odpovídající příslušné třídě rozkladu

Page 91: Objektové databáze a OQL

Group by (2)

Na třídy rozkladu lze aplikovat agregační funkce a filtrovat je pomocí klauzule having.

select e.salary,number: count (partition)

from e in Globe.employeesgroup by e.salaryhaving count (partition) > 1

Page 92: Objektové databáze a OQL

Order by

select e from e in Globe.employees

order by e.name, e.age

Výsledek je typu list, tedy je to uspořádaná kolekce.

Page 93: Objektové databáze a OQL

Množinové operátory

• na typech bag a set jsou definovány operátory union, intersect a except

• sémantika stejná jako v SQL

• dále je definován operátor pick, který z kolekce vybere jeden její prvek (Axiom výběru)

Page 94: Objektové databáze a OQL

Kvantifikace

• existenční:select c.name

from c in TheCompanies

where exists e in c.employees : e.age < 23

• univerzálníselect c.name

from c in TheCompanies

where forall e in c.employees : e.age < 23

Page 95: Objektové databáze a OQL

Define

• výsledek dotazu lze pojmenovat

define MyEmployees as

select e

from e in Global.employees

where e.name like “Sp*”

• lze použít v dotazech na místě kolekce• vzdálená podobnost s view

Page 96: Objektové databáze a OQL

Volání metod

• lze všude, kde typově odpovídá návratová hodnota metody

• volání bezparametrické metody:select e from e in Globe.employees

where e.salary > 10000

• a metody s parametry:select e from e in Globe.employees

where e.salary_by_hours(40) > 2000

Page 97: Objektové databáze a OQL

Shrnutí

• výsledek každého dotazu je typu, který náleží do modelu ODMG a tedy lze nad ním také pokládat dotazy

• operátory lze libovolně skládat, pokud jsou dodrženy typy operandů

• OQL je funkcinonální jazyk• OQL není, na rozdíl od dnešního standardu

SQL, turingovsky úplný


Recommended