objekt-relationale Datenbanken Die objekt-relationale Datenbank ORACLE 9i Zurück zur ersten Seite Konzepte von Oracle 9i relationale Datenbank objektorientierte Zusätze können genutzt werden müssen nicht genutzt werden objektorientierte Erweiterungen von Struktur- und Tabellendefinitionen SQL und PL/SQL Zurück zur ersten Seite Objekt-Tabellen statt Tupel-Tabellen Objekt-Tabelle Personen Meier, 1.5.60, ... Huber, 11.5.69, ... Müller, 1.12.60, ... Tupel-Tabelle Personen Name Meier Huber Müller Meier Geburtsdatum 1.5.60 11.5.69 1.12.60 7.5.80 ... Meier, 7.5.80, ... Personen_typ: Name, Geburtsdatum, ... Trennung von Strukturdefinition und Tabellendefinition als Objektmenge statt Tupelmenge Zurück zur ersten Seite Aggregation: eingebettete Objekte Dr. Panoramastr. 80 Franz 88255 Baienfurt Gmeiner 18. 7. 1965 Prof. Sepp Holzer Buchenallee 80 88111 Biergarten 8. 8. 1955 Zurück zur ersten Seite Strukturierte Attribute durch eingebettete Objekte create type Name_typ as object (titel varchar2(10), vorname varchar2(50), nachname varchar2(50)); create type Person_typ as object ( create type adress_typ as object (strasse varchar2(50), hausnr varchar2(5), plz char(5), create table personen of person_typ; ort varchar2(50)); Zurück zur ersten Seite Vererbung, Klassenhierarchien Personen Dr. Panoramastr. 80 Franz 88255 Baienfurt Gmeiner 18. 7. 1965 Studenten 12345 Sarah Heimer Hirschgraben 8 88212 Ravensb. AI 18. 4. 1980 Zurück zur ersten Seite Unterklassen create type person_typ as object (pname name_typ, . . . ) not final; create type student_typ under person_typ (Studiengang varchar(3), Matrikelnummer integer) not final; create type hiwi_typ under student_typ (Beginn date, Ende date, Wochenstd integer, Aufgabe varchar(100)); create table personen of person_typ; Hier dürfen auch Studenten und Hiwis eingetragen werden Zurück zur ersten Seite Methoden Zu Objekt-typ gehören auch Methoden, z. B. create type person_typ as object (pname name_typ, adresse adress_typ, Dr. Panoramastr. 80 gebdat date, Franz 88255 Baienfurt geschlecht char(1), Gmeiner 18. 7. 1965 Zurück zur ersten Seite Implementierung von Methoden mit PL/SQL Zurück zur ersten Seite Methoden zur Sortierung ORDER BY bei zusammengesetztem Typ nicht möglich Definiere eigene Sortierfunktion Analog zu Methodendefinition Zwei Formen: Map-Funktion Order-Funktion Zurück zur ersten Seite Beispiel Map-Funktion create type name_typ as object (titel varchar2(10), vorname varchar2(50), nachname varchar2(50), map member function namensort return varchar2); create type body name_typ as map member function namensort return varchar2 is begin return nachname || vorname; end namensort; end name_typ; Zurück zur ersten Seite Mehrwertige Attribute durch geschachtelte Tabellen Dr. Panoramastr. 80 Telefon: Franz 88255 Baienfurt 0751/552515 Gmeiner 0751/501-9733 18. 7. 1965 Prof. Sepp Holzer Buchenallee 80 Telefon: 88111 Biergarten 0751/55756 8. 8. 1955 0751/501-9734 0171/987654 Zurück zur ersten Seite Beispiel: mehrwertige Attribute create type telefonarray as varray(5) of varchar2(30); -- maximal 5 Telefonnummern pro Person oder create type person_typ as object (pname name_typ, adresse adress_typ, gebdat date, geschlecht char(1), telefonliste telefonarray, member function alter_jahre return integer); create table personen of person_typ nested table telefonliste store as person_telefonnrn; Zurück zur ersten Seite Referenzen auf andere Objekte Anne Holzer Buchenallee 80 88111 Biergarten Papa Mama 18. 7. 1985 Prof. Sepp Holzer Buchenallee 80 88111 Biergarten 8. 8. 1955 Zurück zur ersten Seite Referenzen Jedes Objekt hat Objektidentifikator Referenzen beziehen sich auf diese OID Realisierung von 1:n-Relationen statt Fremdschlüsseln Effizienzvorteile bei Richtung von n zu 1 Zurück zur ersten Seite Beispiel für Referenzen create type person_typ; -- Vorwärtsdeklaration create type person_typ as object (pname name_typ, adresse adress_typ, gebdat date, geschlecht char(1), telefonliste telefonarray, ref_vater ref person_typ, ref_mutter ref person_typ, member function alter_jahre return integer, pragma restrict_references (alter_jahre, wnps, wnds)); Zurück zur ersten Seite Einfügen in Objekttabellen: Konstruktoren insert into personen values (person_typ(name_typ('Dr.', 'Martin', 'Hulin'), adress_typ ('Panoramastrasse', '80', '88255', 'Baienfurt'), '18.10.58', 'm', telefontab('0751/552515', '0751/501-9733', '0171/987654'), NULL, NULL); Zurück zur ersten Seite SELECT über Objekte Select p.adresse.ort from personen p where p.name.titel = 'Prof.' p ist Variable für Objekte der Klasse Person_typ. Zurück zur ersten Seite