Objektorientierte Datenbanksysteme (OODBS) • Motivation: siehe Postrelationale System + Kompatibilität mit OOPS • OODBMS‐Manifesto 1989: – The golden rules: • • • • • • • • • • • • • Komplexe Objekte Objektidentität Datenabstraktion / Kapselung Typen / Klassen Vererbung Polymorphismus Berechnungsvollständigkeit g g Erweiterbarkeit Persistenz Sekundärspeicherverwaltung Ablaufintegrität (Concurrency) Physische Integrität (Recovery) Interaktive Anfragesprache 17. Prof. Jasper: Datenbanksysteme 1 OODBS: • Objektidentität und Objektstruktur – – – – OID (eindeutig, unveränderlich, persistent) Was ist ein Objekt? Körpergröße = Länge des Schreibtisches? Was sind Werte? j p g g Typkonstruktoren (Atom, Tupel, Menge, (List, Bag, Array)) Ein Objekt (i, c, v) besteht aus • i = Objekt i = Objekt‐ID ID • c = Typkonstruktor • v = Objektzustand (Wert) • c == „Atom c == Atom“ => v ist atomarer Wert aus den vom Systeme zur Verfügung gestellten => v ist atomarer Wert aus den vom Systeme zur Verfügung gestellten Wertebereichen • c == „Tupel“ => v hat die Form <a1:i1, ..., an:in> mit ai Attributname und ij Objektidentifikator • c == „Menge“ => v hat die Form {i1, ..., in} mit ij Objektidentifikator 17. Prof. Jasper: Datenbanksysteme 2 OODBS: • Beispiele: – – – – – – – – – – – – • o1 = (i1, atom, ‘Houston’) o2 = (i2, atom, ‘Bellaire’) o3 = (i = (i3, atom, atom ‘Sugarland’) Sugarland ) o4 = (i4, atom, 5) o5 = (i5, atom, ‘Research’) o6 = (i6, atom, ‘1988‐05‐22’) o7 = (i ( 7, set, {i1, i2, i3}) { }) o8 = (i8, tuple, <dname:i5, dnumber:i4, mgr:i9, locations:i7, employees:i10, projects:i11>) o9 = (i9, tuple, <manager:i12, manager_start_date:i6>) o10 = (i (i10, set, {i set {i12, ii13, ii14}) o11 = (i11, set {i15, i16, i17}) o12 = (i12, tuple, <fname:i18, minit:i19, lname:i20, ssn:i21, . . ., salary:i26, supervi‐sor:i27, dept:i8>) Identität und Gleichheit: Beispiel – – – – – – o1 = (i1, tuple, <a1:i4, a2:i6>) o2 = (i2, tuple, <a1:i5, a2:i6>) o3 (i3 tuple <a1:i4 a2:i6>) o3 = (i3, tuple, <a1:i4, a2:i6>) o4 = (i4, atom, 10) o5 = (i5, atom, 10) o6 = (i6, atom, 20) ( , , ) 17. Prof. Jasper: Datenbanksysteme 3 OODBS: • Typkonstruktoren: Object Typkonstruktoren: Object Definition Language Definition Language – Beispiel: define type Angestellter: tuple( vname: initial: nname: ssn: geburtsdatum: adresse: geschlecht: char; gehalt: vorgesetzter: abt: define type Datum tuple( jahr: monat: tag: define type Abteilung tuple( aname: abtnummer:integer; mgr: string; char; string; string; Datum; string; float; Angestellter; Abteilung;); integer; integer; integer;); string; tuple ( manager: Angestellter; anfangsdatum: Datum;); standorte set(string); angestellte set(Angestellter); projekte set(Projekt);); 17. Prof. Jasper: Datenbanksysteme 4 OODBS: • Kapselung l – Information Hiding • Schnittstelle des Objekts = Menge von Operationen • Signatur in ODL • Implementierung = Methode in Programmiersprache • Aufruf durch Nachricht an das jeweilige Objekt • create, alter‐, destroy‐Operationen l d O i Define class Abteilung type tuple( operations( aname: abtnummer:integer; mgr: string; tuple ( manager: Angestellter; anfangsdatum: Datum;); standorte set(string); angestellte set(Angestellter); projekte set(Projekt);); anzahl_angest: integer; create_abt: Abteilung; destroy abt: destroy_abt: boolean; assign_angest(e: Angestellter): boolean; remove_angest(e: Angestellter): boolean; end Abteilung; • Problem Datenbanken: zu starre Regeln für den Zugriff auf Zustand 17. Prof. Jasper: Datenbanksysteme 5 OODBS: • Objektpersistenz über Benennung und Erreichbarkeit – Benennung: eindeutiger Name für ein Objekt, persistent – Erreichbarkeit: direkt und indirekt referenzierte Objekte sind vom Ausgangsobjekt Erreichbarkeit: direkt und indirekt referenzierte Objekte sind vom Ausgangsobjekt erreichbar – Alle erreichbaren Objekte eines persistenten Objekts sind ebenfalls persistent! Define class Abteilungen type set( Abteilung); operations( add_abt(d: Abteilung): boolean; remove_abt(d: Abteilung): boolean; create_abt_set: Abteilungen; destroy_abt_set: boolean; end Abteilungen; .... persistent name Alle_Abteilungen: Abteilungen; .... d := create_abt; .... b := AlleAbteilungen.add_abt(d); .... 17. Prof. Jasper: Datenbanksysteme 6 OODBS: • Typhierarchien und Vererbung – Einfachste Art der Typvereinbarung: Name + öffentliche Funktionen (Attribute und/oder Operationen) und/oder Operationen) – PERSON: Name, Adresse, GebDat, Alter, SSN – Subtyp erbt alle Eigenschaften des Supertyps: – STUDENT subtype‐of PERSON : Fachrichtung, Semester – ANGESTELLTER subtype‐of PERSON : Gehalt, Vorgesetzter, Abteilung • Jeder Jeder Typ hat zugehörige Kollektion (Extent) von kompatiblen Typ hat zugehörige Kollektion (Extent) von kompatiblen Objekten – Jedes Objekt eines Typs gehört zum entsprechenden Extent sowie zu allen Extents aller Supertypen – ROOT‐Klasse (OBJECT‐Klasse) enthält alle Objekte einer OODB – In OO(DB)‐Systemen wird zwischen persistenten und transienten Objekten In OO(DB) Systemen wird zwischen persistenten und transienten Objekten unterschieden. 17. Prof. Jasper: Datenbanksysteme 7 OODBS: • Weitere Konzepte von OO‐Datenmodellen – Unstrukturierte Objekte • BLOB, CLOB; siehe auch SQL:1999 BLOB CLOB i h h SQL 1999 – Polymorphismus • Unterschiedliche Implementierungen für eine Operator‐Signatur (siehe auch SQL:1999) – Mehrfach‐ / Selektivvererbung • Vermeindung / Auflösung von Namenskonflikten / Auflösung von Namenskonflikten • Except‐Klausel beschreibt im Subtyp die nicht vererbten Aspekte des Supertyps – Versionen und Konfigurationen • In vielen Anwendungsdomänen sinnvoll (CAx) • Version von Objekten • Konfiguration komplexer Objekte aus „passenden Konfiguration komplexer Objekte aus passenden“ Versionen der Basisobjekte Versionen der Basisobjekte 17. Prof. Jasper: Datenbanksysteme 8 OODBS: • Das ODMG‐Objektmodell • ODMG: Object Data Management Group (Herstellerkonsortium) • Der „Standard“ enthält: – – – – Objektmodell Objektdefinitionssprache (ODL) Objektanfragesprache (OQL) Objektanfragesprache (OQL) Bindings für OOPL • Versionen – 1.0: 1993 (ODMG‐93) – 2.0: 1997 (ODMG 2.0) 17. Prof. Jasper: Datenbanksysteme 9 OODBS: • Das ODMG‐Objektmodell – Objekte (haben ID und Zustand) und Literale (haben Wert) – Objekte beschrieben durch Obj kt b h i b d h – – – – – Objektidentifikator (systemweit eindeutig) Name (eindeutig in DB, optional) Lebensdauer (transient oder persistent) Struktur beschrieben über Typkonstruktoren Objekt ist entweder atomar oder eine Sammlung (collection object) – Literal kann atomar, eine Sammlung oder strukturiert sein – atomare Literale entsprechen den Werten der Basistypen (wie C, C++) – strukturierte Literale strukturierte Literale entspechen Tupeln, Definition über Struct Tupeln, Definition über Struct wie C, C wie C, C++ – Sammlungsliterale spezifizieren einen Wert, der eine Sammlung von Objekten oder Literalen darstellt; die zugehörige Sammlung hat eine OID – Interface Interface‐Definitionen Definitionen für Schnittstellen; für Schnittstellen; – Alle Objekte erben von dem „Interface „Object“ “ 17. Prof. Jasper: Datenbanksysteme 10 OODBS: • Eingebaute Schnittstellenhierarchie für OODBMS Object Iterator C ll ti Collection set list D t Date Ti Timestamp t bag array 17. Prof. Jasper: Datenbanksysteme I t Interval l Ti Time dictionary 11 OODBS: • Sammlungsobjekte: – Erben von der Schnittstelle Collection – Für jedes Sammlungs‐Objekt O existieren j g j • O.cardinaltity() • O.is_empty() • O.insert_element(e), O.remove_element(e) O insert element(e) O remove element(e) • O.contains_element(e) • (i = )O.create_iterator() erzeugt ein Iterator‐Objekt mit i.reset(), i.next_position, i get element i.get_element – Sammlungsobjekte werden in Set, List, Array, Bag und Dictionary spezialisiert: • Set enthält zusätzlich Mengenoperationen • List ist geordnete Liste (first, last, i‐te List ist geordnete Liste (first last i te Stelle) • Array ist wie List mit max. Anzahl Elemente • Bag ist wie Set; enthält zusätzlich Duplikat‐Eliminierung • Dictionary Di ti verwaltet Paare von (eindeutigen) Schlüsseln mit Werten <k, v> (bind, lt t P ( i d ti ) S hlü l it W t k (bi d unbind, lookup); liefert assoziativen Zugriff auf Objekte 17. Prof. Jasper: Datenbanksysteme 12 OODBS: • Atomare Objekte – Jedes benutzerdefinierte Objekt, das keine Sammlung ist, ist ein atomare j Objekt – Schlüsselwort „class“ – Spezifiziert Eigenschaften und Operationen – Eigenschaften sind Attribute und Beziehungen Ei h ft i d Att ib t dB i h – Attribute haben Werte (in der Regel Literale, oder OID) – Beziehungen sind binär und als Paar von Umkehrreferenzen definiert – Für Operationen werden Signatur und Ausnahmen definiert – Einfaches Beispiel: class Employee (extent all_emplyees all emplyees key ssn) { attribute string name; attribute string ssn; attribute tt ib t short h t age; relationship Dept works_for; void reassign(in string new_name); } 17. Prof. Jasper: Datenbanksysteme 13 OODBS: • B i i l mit Beispiel i (inverser) Beziehung (i )B i h ( l i hi ) (relationship) class Faculty extends Person (extent faculty) { attribute string rank; attribute float salary; attribute string g p phone; … relationship Dept works_in inverse Dept::has p _faculty; y relationship set<GradStu> advises inverse GradStu::advisor; give_raise (in float raise); void g void promote (in string new_rank); }; 17. Prof. Jasper: Datenbanksysteme 14 OODBS: • Vererbung – Von einer Schnittstelle oder Klasse werden nur die Operationen geerbt (nicht die Zustandseigenschaften); Zustandseigenschaften); – Eine Schnittstelle ist nicht instanziierbar – Eine Klasse ist instanziierbar – EXTENDS‐Schlüssel erlaubt die zusätzliche Vererbung von Zustandseigenschaften (nur f ( zwischen Klassen!) – Mehrfachvererbung über EXTENDS nicht zulässig. • Extents – Zu jeder Klasse (class) kann ein benannter Extent definiert werden, der alle persistenten Objekte der Klasse dauerhaft verwaltet persistenten Objekte der Klasse dauerhaft verwaltet. – Eine Klasse mit einem Extent kann Schlüssel besitzen, die Objekte eindeutig identifizieren • Factory – Objekte werden durch Operationen der sogenannten Factory‐Objekte erzeugt; erben von „ObjectFactory“,, das „new() von „ObjectFactory das „new()“ bereitstellt. bereitstellt. 17. Prof. Jasper: Datenbanksysteme 15 OODBS: • Die Objektdefinitionssprache (ODL) – Unterstützung der semantischen Konstrukte des ODMG 2.0 Modells – Programmiersprachenunabhängig P i h bhä i – Dient der Definition von Objektspezifikationen (keine vollständige Programmiersprache) g p ) – Über Sprachbindungen werden Konstrukte abgebildet – Grafische Elemente von ODL: Schnittstelle Klasse Beziehungen Person-IF Student 1:1 1:N M:N Vererbung Schnittstellenvererbung (IST-EIN) mit „:“ 17. Prof. Jasper: Datenbanksysteme Klassenvererbung mit extends 16 OODBS: • Beispiel: has_faculty 1 has_majors Person Department 1 offers 1 m offered_by works_in m majors_in m Course completed_sections F Faculty lt advises m m St d t Student m students registered_in 1 Section m 1 has_section m of_course GradStudent advisor m CurrSection registered_students d d 17. Prof. Jasper: Datenbanksysteme 17 OODBS: • Die Anfragesprache OQL – Grundlegende Syntax „select ... from ... where“ – Für jede Anfrage ist ein Einstiegspunkt (benanntes persistentes Objekt) erforderlich Für jede Anfrage ist ein Einstiegspunkt (benanntes persistentes Objekt) erforderlich • Name der Extents einer Klasse • Iteratorvariable in der from‐Klausel (mehrere syntaktische Möglichkeiten) – Ergebnistyp – bag (oder set bei select distinct ... ) – Im Allgemeinen jeder Typ der in ODMG 2.0 darstellbar ist – Jeder persistente Name an sich ist eine Anfrage, deren Resultat eine Referenz auf das persistente Objekt ist – Pfadausdrücke spezifizieren ein Anfrageergebnis ausgehend von einem Einstiegspunkt oder von einer Iteratorvariablen – Spezifikation von Pfadausdrücken ist orthogonal – Probleme: Mehrdeutigkeiten bei Ergebnistypen Probleme: Mehrdeutigkeiten bei Ergebnistypen – Konstruktion komplexer Ergebnistypen (struct) möglich 17. Prof. Jasper: Datenbanksysteme 18 OODBS: • Weitere OQL‐Features – Views (define Vi (d fi ... as)) – Elemente von Singletons (einelementige Elemente von Singletons (einelementige Ergebnisse) – Aggregatfunktionen (min, max, count, avg, sum) – Quantoren (existiert, für alle, (Elementtest)) – Listen und Arrays als Anfrageergebnisse – Gruppierung mit expliziter Referenz auf die Partitionen – Having‐Klausel mit expliziter Referenz auf die Partitionen 17. Prof. Jasper: Datenbanksysteme 19