Hauptseminar Hauptseminar DatenbanksysteDatenbanksyste
meme- Datenbanken und XML -- Datenbanken und XML -
Thema: Type-Checking OQL Thema: Type-Checking OQL Queries In The ODMG Type Queries In The ODMG Type
SystemsSystems
Angesprochene PunkteAngesprochene Punkte
Allgemeines zum Type Checking in Allgemeines zum Type Checking in DatenbanksystemenDatenbanksystemen
Kurze Einführung in den ODMG Kurze Einführung in den ODMG StandardStandard
Formale Definitionen und RegelnFormale Definitionen und Regeln Betrachtung von auftretenden Betrachtung von auftretenden
Problemen und skizzieren von Problemen und skizzieren von LösungsvorschlägenLösungsvorschlägen
ReferenzenReferenzen
Type Checking (1/2)Type Checking (1/2)
Es gibt zwei Möglichkeiten von Es gibt zwei Möglichkeiten von Type-CheckingType-Checking
Dynamisches type-checking während Dynamisches type-checking während der Programmausführungder Programmausführung
Statisches type-checking, zur Statisches type-checking, zur KompilierzeitKompilierzeit
Type Checking (2/2)Type Checking (2/2)
Aus folgenden Gründen wird Aus folgenden Gründen wird statisches type-checking bei statisches type-checking bei Datenbanken bevorzugt:Datenbanken bevorzugt: Die Effizienz der Datenbank sollte nicht Die Effizienz der Datenbank sollte nicht
unnötig belastet werdenunnötig belastet werden Laufzeitfehler sind bei Datenbanken Laufzeitfehler sind bei Datenbanken
besonders kritischbesonders kritisch „„Message not understood“-Fehler Message not understood“-Fehler
werden durch statisches type-checking werden durch statisches type-checking ausgeschlossenausgeschlossen
ODMG Standard (1/5)ODMG Standard (1/5)
ODMG steht für Object Data ODMG steht für Object Data Management Group (Management Group (www.odmg.orgwww.odmg.org))
1993 wurde der ODMG 1.0 Standard 1993 wurde der ODMG 1.0 Standard veröffentlicht; der aktuelle Stand ist veröffentlicht; der aktuelle Stand ist Release 3.0Release 3.0
Dieser Vortrag geht noch auf den Dieser Vortrag geht noch auf den ODMG 2.0 Standard einODMG 2.0 Standard ein
ODMG Standard (2/5)ODMG Standard (2/5)
Interface: Definiert das abstrakte Verhalten eines Interface: Definiert das abstrakte Verhalten eines Objektes Objektes
Class: Ist ein erweitertes Interface mit einem Class: Ist ein erweitertes Interface mit einem StatusStatus
Literal: Definiert nur einen abstrakten StatusLiteral: Definiert nur einen abstrakten Status
LiteralLiteralInterfaceInterface
ClassClass
ODMG Standard (3/5)ODMG Standard (3/5)
Was ist ein Was ist ein Interface?Interface?
Ein Interface Ein Interface definiert das definiert das abstrakte Verhalten abstrakte Verhalten von Objekt-Typen.von Objekt-Typen.
Ein Interface Ein Interface beinhaltet nur beinhaltet nur Methoden, keine Methoden, keine Attribute.Attribute.
Beispiel (The top interface)
interface Object {
boolean same_as(in Object anObject);
Object copy(); void delete();
};
ODMG Standard (4/5)ODMG Standard (4/5)
Was ist eine Klasse?Was ist eine Klasse?
Eine Klasse ist ein Eine Klasse ist ein erweitertes Interface.erweitertes Interface.
Eine Klasse definiert Eine Klasse definiert das abstrakte das abstrakte Verhalten und den Verhalten und den abstrakten Zustand abstrakten Zustand von Objekt-Typen.von Objekt-Typen.
Beispiel (Class with extent)
class Employee (extent employees){ attribute string name; attribute short id; attribute Department dept; float salary(); void hire(in Department d); void fire();};
class Department (extent departments){ attribute string name; attribute short id; short NoOfEmployees();};
ODMG Standard (5/5)ODMG Standard (5/5)
Was ist ein Literal?Was ist ein Literal?
Ein Literal definiert Ein Literal definiert nur den abstrakten nur den abstrakten Zustand eines Zustand eines primitiven Literal-primitiven Literal-Typen.Typen.
Es gibt keine Es gibt keine Objektidentitäten Objektidentitäten für Literalefür Literale
Literal-Typen:
-boolean-char-short-long-float-double-octet-string-user-defined collection, union and enumeration literale
OQL- QueriesOQL- Queries
Das Resultat ist Das Resultat ist eine Menge vom eine Menge vom Typ well_paidTyp well_paid
Der Typ well_paid Der Typ well_paid ist vorher definiert ist vorher definiert und hat die und hat die Komponenten emp Komponenten emp und salund sal
Durch order by Durch order by wird eine Liste von wird eine Liste von Objekten erzeugtObjekten erzeugt
Beispiel
select well_paid(emp: x.name, sal: x.salary())from employees as xwhere x.salary() > 50000and x.dept.NoOfEmployees()>100order by emp
Collection Objects (1/2)Collection Objects (1/2)
Es gibt verschiedene Typen von Es gibt verschiedene Typen von „Mengen“„Mengen“
Set<t> : Eine Menge ohne DuplikateSet<t> : Eine Menge ohne Duplikate Bag<t> : Eine Menge mit DuplikatenBag<t> : Eine Menge mit Duplikaten List<t> : Geordnete MengeList<t> : Geordnete Menge Array<t> : Geordnete Menge mit IndizesArray<t> : Geordnete Menge mit Indizes Dictionary<t,v> : Menge aus Schlüsseln Dictionary<t,v> : Menge aus Schlüsseln
denen ein Wert zugeordnet wirddenen ein Wert zugeordnet wird
Collection Objects (2/2)Collection Objects (2/2)
Parametric polymorphism im ODMG Parametric polymorphism im ODMG ObjektmodellObjektmodell any steht für jeden Objekttypen, dadurch ergeben any steht für jeden Objekttypen, dadurch ergeben
sich auch weitere Probleme beim type-checkingsich auch weitere Probleme beim type-checking Die anderen Collection Types werden von Die anderen Collection Types werden von
diesem Interface abgeleitetdiesem Interface abgeleitet
Interface Collection: Object { unsigned long cardinality(); boolean is_empty(); void insert_element(in any element); void remove_element(in any element); boolean contains_element(in any element); Iterator create_iterator();};
Java vs. C++Java vs. C++
Java Java unterstützt unterstützt keinen keinen parametrisiertparametrisierten en PolymorphismPolymorphismusus
C++ bietet zu C++ bietet zu diesem Zweck diesem Zweck Templates anTemplates an
interface Collection { int size(); boolean isEmpty(); void add(in Object element); boolean remove(in Object element); Iterator iterator(); ...};
interface Collection <T> { unsigned long cardinality(); boolean is_empty(); void insert_element(T element); void remove_element(T element); boolean contains_element(T element); Iterator <T> create_iterator(); };
Formale Spezifikation Formale Spezifikation (1/2)(1/2)
Ein Schema ist eine Menge von Ein Schema ist eine Menge von VerknüpfungenVerknüpfungen Es beinhaltet Schlüsselwörter, die mit Es beinhaltet Schlüsselwörter, die mit
interfaces, classes, class extents und objects interfaces, classes, class extents und objects assoziiert sindassoziiert sind
Ein Schema ist wohlgeformt, wenn:Ein Schema ist wohlgeformt, wenn: jedes Schlüsselwort nur genau einer jedes Schlüsselwort nur genau einer
Zuordnung entspricht.Zuordnung entspricht. der Typ zu jedem Objekt ebenfalls im Schema der Typ zu jedem Objekt ebenfalls im Schema
enthalten ist.enthalten ist. bei interfaces und classes die Regeln für die bei interfaces und classes die Regeln für die
Vererbung berücksichtigt wurden.Vererbung berücksichtigt wurden.
Formale Spezifikation Formale Spezifikation (2/2)(2/2)
Das Hinzufügen einer class extent zu Das Hinzufügen einer class extent zu einem Schema stellt ebenfalls den einem Schema stellt ebenfalls den Namen des extent im Schema zur Namen des extent im Schema zur Verfügung.Verfügung.
Ein Schema beinhaltet vordefinierte Ein Schema beinhaltet vordefinierte ZuordnungenZuordnungen String, int, boolean…String, int, boolean… Collection, Bag, Set, List, Array…Collection, Bag, Set, List, Array… die Datenbank-/Transaktionsklassedie Datenbank-/Transaktionsklasse
Vererbung (1/5)Vererbung (1/5)
Das top interface ist „Object“, alle Das top interface ist „Object“, alle weiteren Interfaces werden von weiteren Interfaces werden von diesem abgeleitetdiesem abgeleitet
Vererbung (2/5)Vererbung (2/5)
ReflexivitätReflexivität
TransitivitätTransitivität
Vererbung (3/5)Vererbung (3/5)
SubstitutionSubstitution Ein Objekt vom Typ CEin Objekt vom Typ C2 2 kann ein Objekt vom kann ein Objekt vom
Typ CTyp C1 1 ersetzen, falls Cersetzen, falls C2 2 von Cvon C11 abgeleitet wird abgeleitet wird
Die Regel beschreibt, daß im Ausdruck e ein Die Regel beschreibt, daß im Ausdruck e ein vorkommendes y durch ein x ersetzt werden kann.vorkommendes y durch ein x ersetzt werden kann.
Vererbung (4/5)Vererbung (4/5)
Type castsType casts Ist ein Ausdruck e vom Typ CIst ein Ausdruck e vom Typ C11 und es gilt und es gilt
außerdem noch, dass Caußerdem noch, dass C2 2 von Cvon C1 1 abgeleitet ist, ist abgeleitet ist, ist ein type-cast möglichein type-cast möglich
Es wird ein dynamisches type-checking benötigtEs wird ein dynamisches type-checking benötigt
Vererbung (5/5)Vererbung (5/5)
Beispiel type castsBeispiel type casts
class Person { (extent persons)...}
class Employee: Person {(extent employees)long salary();...}
select well_paid(emp: x.name, sal:((Employee)x).salary())from persons as xwhere ((Employee)x).salary() > 50000
Weitere Regeln Weitere Regeln zusammengefaßtzusammengefaßt
Auf ähnliche Weise können nun auchAuf ähnliche Weise können nun auch StructuresStructures InterfacesInterfaces ClassesClasses Objects and MessagesObjects and Messages
in das Schema mit aufgenommen in das Schema mit aufgenommen werden.werden.
OQL Queries and the ODMG OQL Queries and the ODMG
object model (1/3)object model (1/3) Nun kommen wir zu dem ersten Nun kommen wir zu dem ersten
negativen Beispiel für das type-negativen Beispiel für das type-checking:checking:
select well_paid(emp: x.name, sal: x.salary())from employees as xwhere x.salary() > 50000
Employees ist vom Typ CollectionEmployees ist vom Typ Collection x ist ein Objekt vom Typ anyx ist ein Objekt vom Typ any
OQL Queries and the ODMG OQL Queries and the ODMG
object model (2/3)object model (2/3) Methoden für den Type any sind im Methoden für den Type any sind im
ODMG Standard nicht definiertODMG Standard nicht definiert Es ist nicht möglich auf die Es ist nicht möglich auf die
Typkorrektheit von x.name und Typkorrektheit von x.name und x.salary() zu schließenx.salary() zu schließen
Theorem: OQL-Queries können nicht Theorem: OQL-Queries können nicht auf Typkorrektheit überprüft werden.auf Typkorrektheit überprüft werden.
OQL Queries and the ODMG OQL Queries and the ODMG
object model (3/3)object model (3/3) Beweis:Beweis:
select projectionfrom e1 as x1, e2 as x2, … ,en as xn
where e
Die Variabel-Typen der xDie Variabel-Typen der xii müssen bestimmt müssen bestimmt werdenwerden
Die Variabel-Typen der eDie Variabel-Typen der eii müssen bestimmt müssen bestimmt werdenwerden
Im besten Fall nehmen wir an, daß die eIm besten Fall nehmen wir an, daß die eii vom Typ vom Typ Collection sindCollection sind
Folglich sind die xFolglich sind die xii vom Typ any vom Typ any
OQL Queries and Java OQL Queries and Java (1/5)(1/5)
Die bisherigen Probleme beruhen auf Die bisherigen Probleme beruhen auf dem Type any im ODMG Type-Systemdem Type any im ODMG Type-System
In der Java-Anbindung ist der Type In der Java-Anbindung ist der Type Object das Wurzel-ObjektObject das Wurzel-Objekt
Alle Objekte im Java-Typ-System Alle Objekte im Java-Typ-System erben die Eigenschaften des Wurzel-erben die Eigenschaften des Wurzel-ObjektesObjektes
OQL Queries and Java OQL Queries and Java (2/5)(2/5)
Theorem: Statisches Type-checking ist Theorem: Statisches Type-checking ist im Java-Type-System nicht möglichim Java-Type-System nicht möglich
BeweisBeweis Der Typ der Variable x wird nun als Der Typ der Variable x wird nun als
Objekt identifiziertObjekt identifiziert Nur Methoden aus dem Interface Nur Methoden aus dem Interface
„Object“ können benutzt werden„Object“ können benutzt werden Das type-checking schlägt fehl sobald Das type-checking schlägt fehl sobald
unbekannte Methoden aufgerufen werdenunbekannte Methoden aufgerufen werden
OQL Queries and Java OQL Queries and Java (2/5)(2/5)
BeispielBeispielclass Professor {public float salary() { }...}class Course {public int enrollment() { }...}Collection professors;Collection courses;
select xfrom professors as x, x.courses() as ywhere x.salary() > 70000and y.enrollment() > 50
OQL Queries and Java OQL Queries and Java (3/5)(3/5)
x.salary(), x.courses() und y.enrollment() x.salary(), x.courses() und y.enrollment() werden stets als nicht typkorrekt werden stets als nicht typkorrekt klassifiziertklassifiziert
Hier stellt sich die Frage ob sich Java für Hier stellt sich die Frage ob sich Java für die Datenbankprogrammierung eignet?die Datenbankprogrammierung eignet?
Betrachten wir zunächst eine Lösung für Betrachten wir zunächst eine Lösung für dieses Problem – dynamisches type-dieses Problem – dynamisches type-checking…checking…
OQL Queries and Java OQL Queries and Java (4/5)(4/5)
OQL Query with type castsOQL Query with type casts
Theorem: Bei ausdrücklicher Theorem: Bei ausdrücklicher Typangabe für jede Variabel Typangabe für jede Variabel innerhalb der Anfrag im Java-Typ-innerhalb der Anfrag im Java-Typ-System ist ein type-checking System ist ein type-checking möglich, allerdings nur auf Kosten möglich, allerdings nur auf Kosten des teuren Checks zur Laufzeit des teuren Checks zur Laufzeit (ohne Beweis)(ohne Beweis)
OQL Queries and Java OQL Queries and Java (5/5)(5/5)
BeispielBeispiel
Collection professors;Collection courses;
select xfrom professors as (Professor)x, x.courses() as (Course)ywhere x.salary() > 70000and y.enrollment() > 50
Diese Anfrage ist aufgrund des type-casts möglichDiese Anfrage ist aufgrund des type-casts möglich Es wird ein Check zur Laufzeit ausgeführtEs wird ein Check zur Laufzeit ausgeführt
OQL Queries and C++ OQL Queries and C++ (1/2)(1/2)
Theorem: Ein Type-System, das Theorem: Ein Type-System, das parametrisierten Polymorphismus parametrisierten Polymorphismus unterstützt erlaubt statisches type-unterstützt erlaubt statisches type-checking von OQL Querieschecking von OQL Queries
Beweis: Dieses Resultat wird erziehlt, da Beweis: Dieses Resultat wird erziehlt, da zur Kompilierzeit jedem Collection-Type zur Kompilierzeit jedem Collection-Type ein bestimmter Type zugeordnet wird. ein bestimmter Type zugeordnet wird. Dadurch wird jeder Element-Type Dadurch wird jeder Element-Type eindeutig einer Menge zugeordnet.eindeutig einer Menge zugeordnet.
Die Variablen einer Anfrage gehören Die Variablen einer Anfrage gehören einem spezifischen Types aneinem spezifischen Types an
OQL Queries and C++ OQL Queries and C++ (2/2)(2/2)
Beispiel in C++Beispiel in C++Collection <Professor> professors;Collection <Course> courses;
select xfrom professors as x, x.courses() as ywhere x.salary() > 70000and y.enrollment > 50
Korrolar: Das Type-System von C++ erlaubt Korrolar: Das Type-System von C++ erlaubt statisches type-checking von OQL Queriesstatisches type-checking von OQL Queries
OQL Queries with Order OQL Queries with Order by (1/2)by (1/2)
Eine Anfrage in allgemeiner Form:Eine Anfrage in allgemeiner Form:
select projectionfrom e1 as x1, e2 as x2, … ,en as xn
where eorder by e´1, e´2, … , e´m
Auch hier treten die schon Auch hier treten die schon bekannten Probleme aufbekannten Probleme auf
Ein Vergleich von zwei Objekten Ein Vergleich von zwei Objekten kommt hinzukommt hinzu
OQL Queries with Order OQL Queries with Order by (2/2)by (2/2)
Theorem: Bei expliziter Typangabe für Theorem: Bei expliziter Typangabe für jede Variabel innerhalb der Anfrage jede Variabel innerhalb der Anfrage mit Order by Klausel im Java-Typ-mit Order by Klausel im Java-Typ-System ist ein type-checking möglich, System ist ein type-checking möglich, allerdings wiederum nur zur Laufzeit allerdings wiederum nur zur Laufzeit
Theorem: Ein Type-System, das Theorem: Ein Type-System, das parametrisierten Polymorphismus parametrisierten Polymorphismus unterstützt erlaubt statisches type-unterstützt erlaubt statisches type-checking von OQL Queries mit Order checking von OQL Queries mit Order by Klausel by Klausel
Java OQL (1/6)Java OQL (1/6)
Java OQL ist eine Untersprach von Java OQL ist eine Untersprach von Java und ermöglicht eine leichtere Java und ermöglicht eine leichtere Anbindung an die DatenbankAnbindung an die Datenbank
Es gibt zwei Formen dieser Es gibt zwei Formen dieser VereinfachungVereinfachung durch Methodendurch Methoden durch Klassendurch Klassen
Java OQL (2/6)Java OQL (2/6)
Zunächst die Möglichkeit durch MethodenZunächst die Möglichkeit durch Methoden
interface DCollection extends java.util.Collection { Object selectElement(String predicate) java.util.Iterator select(String predicate) DCollection query(String predicate) boolean existsElement(String predicate)}
Die anderen Interfaces aus dem Die anderen Interfaces aus dem ODMG Standard (DSet, DBag, DList ODMG Standard (DSet, DBag, DList …) werden von diesem Interface …) werden von diesem Interface abgeleitetabgeleitet
Java OQL (3/6)Java OQL (3/6)
Ein Java OQL QueryEin Java OQL Query
DCollection bestPaid;bestPaid = employees.query( „for all x in employees: this.salary() >= x.salary()“);
Das obige Beispiel findet die Menge Das obige Beispiel findet die Menge der bestbezahltesden Mitarbeiterder bestbezahltesden Mitarbeiter
Java OQL (4/6)Java OQL (4/6)
Die Anfrage wird mittels eines Strings Die Anfrage wird mittels eines Strings gestelltgestellt Type-checking im Java-Type-System ist stets Type-checking im Java-Type-System ist stets
möglich, unabhängig vom Stringinhaltmöglich, unabhängig vom Stringinhalt Der String muß während der Laufzeit Der String muß während der Laufzeit
ausgewertet werdenausgewertet werden Theorem: Das type-system von Java Theorem: Das type-system von Java
kann mit Java-OQL-Queries nicht kann mit Java-OQL-Queries nicht umgehen, so daß ein type-checking nicht umgehen, so daß ein type-checking nicht möglich istmöglich ist
Java OQL (5/6)Java OQL (5/6)
Java OQL Queries als KlassenJava OQL Queries als Klassenclass OQLQuery { // Java constructors OQLQuery create(String query); void bind(Object parameter); Object execute();}
DBag selectedEmployee;OQLQuery query = new OQLQuery();query.create(„select well_paid(emp: x.name, sal: x.salary()) from employees as x where x.salary() > $1 and x.dept.NoOfEmployees() > $2“);query.bind(50000); query.bind(100);selectedEmployees = (DBag) query.execute();
Java OQL (6/6)Java OQL (6/6)
Es werden gut bezahlte Mitarbeiter in Es werden gut bezahlte Mitarbeiter in großen Abteilungen gesuchtgroßen Abteilungen gesucht
Bei diesem Beispiel treten mehrere Bei diesem Beispiel treten mehrere Probleme auf:Probleme auf: Es kann nur ein Laufzeitcheck ausgeführt Es kann nur ein Laufzeitcheck ausgeführt
werdenwerden Die Übergabeparameter (mittels Die Übergabeparameter (mittels
query.bind()) müssen zu dem Query passenquery.bind()) müssen zu dem Query passen Der Rückgabewert von query.execute() ist Der Rückgabewert von query.execute() ist
Object, die Select-Anweisung liefert eine Object, die Select-Anweisung liefert eine Menge von ObjektenMenge von Objekten
C++ und OQL-C++ und OQL-ErweiterungErweiterung
Auch für C++ gibt es eine Erweiterung für Auch für C++ gibt es eine Erweiterung für die vereinfachte Anbindung an die Datenbankdie vereinfachte Anbindung an die Datenbank
Die in C++ zur Verfügung stehenden Die in C++ zur Verfügung stehenden Templates helfen hier auch nichtTemplates helfen hier auch nicht
Die Queries werden als String gegeben…Die Queries werden als String gegeben… Beim type-checking sind Strings stets Beim type-checking sind Strings stets
typkorrekttypkorrekt C++ unterliegt den selben Problemen, die C++ unterliegt den selben Problemen, die
eben im Java-Typ-System diskutiert wurdeneben im Java-Typ-System diskutiert wurden
Geordnete Mengen (1/2)Geordnete Mengen (1/2)
Weder im ODMG-Standard noch im Java Weder im ODMG-Standard noch im Java oder C++ Type-System können oder C++ Type-System können geordnete Menge auf Typkorrektheit geordnete Menge auf Typkorrektheit geprüft werdengeprüft werden
Ein Beispiel im ODMG Object ModelEin Beispiel im ODMG Object Modelinterface Ordered_Collection: Collection { unsigned long cardinality(); boolean is_empty(); void insert_element(in Ordered element); void remove_element(in Ordered element); boolean contains_element(in Ordered element); Iterator create_iterator();}
Geordnete Mengen (2/2)Geordnete Mengen (2/2)
Das Interface Ordered_Collection erbt Das Interface Ordered_Collection erbt von Collectionvon Collection
Die Vererbungsregeln wurden bei den Die Vererbungsregeln wurden bei den folgenden Funktionen nicht befolgtfolgenden Funktionen nicht befolgt insert_elementinsert_element remove_element remove_element contains_elementcontains_element
Die Funktionsköpfe (die Die Funktionsköpfe (die Aufrufparameter) dieser Funktionen Aufrufparameter) dieser Funktionen wurden geändertwurden geändert
Bounded Type Bounded Type QuantificationQuantification
Theorem: Ein Type-System, das bounded Theorem: Ein Type-System, das bounded type quantificatien unterstützt und das type quantificatien unterstützt und das top-Object beinhaltet kann geordnete top-Object beinhaltet kann geordnete Mengen auf Typkorrektheit überprüfenMengen auf Typkorrektheit überprüfen
interface Ordered_Collection <T: Ordered>: Collection <T>{...}
Eiffel unterstützt diese Methode, doch C++ Eiffel unterstützt diese Methode, doch C++ benötigt eine klare Vererbungsstrukturbenötigt eine klare Vererbungsstruktur
F-Bounded F-Bounded polymorphism (1/3)polymorphism (1/3)
Theorem: Wenn die C++-Anbindung an Theorem: Wenn die C++-Anbindung an die Datenbank F-bounded polymorphism die Datenbank F-bounded polymorphism unterstützt ist ein statisches type-unterstützt ist ein statisches type-checking von Queries möglichchecking von Queries möglich
interface Ordered_Collection <T: Ord_element <T>> :Collection <T>{...}
F-Bounded F-Bounded polymorphism (2/3)polymorphism (2/3)
BeispielBeispiel
interface Employee { String name; short id:
//boolean leq(Employee e);
}
Dieses Interface entspricht nicht den Dieses Interface entspricht nicht den Vererbungsregeln, da Employee nicht von Vererbungsregeln, da Employee nicht von Ord_element <Employee> abgeleitet wirdOrd_element <Employee> abgeleitet wird
F-Bounded F-Bounded polymorphism (3/3)polymorphism (3/3)
Durch das obige Interface werden die Durch das obige Interface werden die Vererbungsstrukturen wiederhergestelltVererbungsstrukturen wiederhergestellt
Es wird garantiert, daß die Methoden Es wird garantiert, daß die Methoden die richtige Signatur habendie richtige Signatur haben
Statisches Type-checking ist möglichStatisches Type-checking ist möglich
interface Ord_element <Employee> { boolean leq(Employee e);}
ZusammenfassungZusammenfassung
OQL Queries können im ODMG-Standard OQL Queries können im ODMG-Standard nicht auf Korrektheit geprüft werdennicht auf Korrektheit geprüft werden
OQL Queries können in der Java-Anbindung OQL Queries können in der Java-Anbindung nicht auf Korrektheit überprüft werdennicht auf Korrektheit überprüft werden
Parameter Polymorphismus sollte von einer Parameter Polymorphismus sollte von einer Sprache für die Datenbank unterstüzt Sprache für die Datenbank unterstüzt werdenwerden
Um geordnete Menge korrekt zu Um geordnete Menge korrekt zu überprüfen wird F-bounded polymorphism überprüfen wird F-bounded polymorphism benötigtbenötigt
ReferenzenReferenzen Type-Checking OQL Queries In The ODMG Type SystemType-Checking OQL Queries In The ODMG Type System
Suad Alagic – Wichita State UniversitySuad Alagic – Wichita State University
ACM Transaction on Database Systems, Vol.24, No. 3ACM Transaction on Database Systems, Vol.24, No. 3
September 1999, Page 319-360September 1999, Page 319-360
The Object Data Standard ODMG 3.0The Object Data Standard ODMG 3.0
R.G.G. Cattell, Douglas Barry, Mark Berler, Jeff Eastman,R.G.G. Cattell, Douglas Barry, Mark Berler, Jeff Eastman,
David Jordan, Craig Russell, Olaf Schadow, Torsten David Jordan, Craig Russell, Olaf Schadow, Torsten StaniedaStanieda
Fernando VelezFernando Velez
Verlag: Morgan Kaufmann PublishersVerlag: Morgan Kaufmann Publishers
ISBN: 1-55860-647-5ISBN: 1-55860-647-5