objekt-relationale Datenbanken 27.03.2017 objekt-relationale Datenbanken Die objekt-relationale Datenbank ORACLE 9i
Konzepte von Oracle 9i relationale Datenbank objektorientierte Zusätze 27.03.2017 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
Objekt-Tabellen statt Tupel-Tabellen 27.03.2017 Objekt-Tabellen statt Tupel-Tabellen Objekt-Tabelle Personen Tupel-Tabelle Personen Meier, 1.5.60, ... Huber, 11.5.69, ... Müller, 1.12.60, ... Meier, 7.5.80, ... Trennung von Strukturdefinition und Tabellendefinition als Objektmenge statt Tupelmenge Personen_typ: Name, Geburtsdatum, ... create type person_typ as object (pname varchar2(100), adresse varchar2(100), gebdat date, geschlecht char(1)); create table personen of person_typ;
Aggregation: eingebettete Objekte 27.03.2017 Aggregation: eingebettete Objekte Dr. Franz Gmeiner Panoramastr. 80 88255 Baienfurt 18. 7. 1965 Prof. Sepp Holzer Buchenallee 80 88111 Biergarten 8. 8. 1955
Strukturierte Attribute durch eingebettete Objekte 27.03.2017 Strukturierte Attribute durch eingebettete Objekte create type Person_typ as object ( create type Name_typ as object (titel varchar2(10), vorname varchar2(50), nachname varchar2(50)); create type adress_typ as object (strasse varchar2(50), hausnr varchar2(5), plz char(5), ort varchar2(50)); create type person_typ as object (pname name_typ, adresse adress_typ, gebdat date, geschlecht char(1)); create table personen of person_typ;
Vererbung, Klassenhierarchien 27.03.2017 Vererbung, Klassenhierarchien Dr. Franz Gmeiner Panoramastr. 80 88255 Baienfurt 18. 7. 1965 Personen Studenten Sarah Heimer Hirschgraben 8 88212 Ravensb. 18. 4. 1980 AI 12345
27.03.2017 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
Methoden Zu Objekt-typ gehören auch Methoden, z. B. 27.03.2017 Methoden Zu Objekt-typ gehören auch Methoden, z. B. create type person_typ as object (pname name_typ, adresse adress_typ, gebdat date, geschlecht char(1), Panoramastr. 80 88255 Baienfurt Dr. Franz Gmeiner 18. 7. 1965 create type person_typ as object (pname name_typ, adresse adress_typ, gebdat date, geschlecht char(1), member function alter_jahre return integer, pragma restrict_references (alter_jahre, wnps, wnds));
Implementierung von Methoden mit PL/SQL 27.03.2017 Implementierung von Methoden mit PL/SQL create type body person_typ as member function alter_jahre () return integer is jahrg, jahrj, monatg, monatj, tagg, tagj integer; begin jahrg := to_char(gebdat, 'yyyy'); jahrj := to_char(sysdate, 'yyyy'); monatg := to_char(gebdat, 'mm'); monatj := to_char(sysdate, 'mm'); tagg := to_char(gebdat, 'dd'); tagj := to_char(sysdate, 'dd'); if monatj > monatg or (monatj = monatg) then return jahrj - jahrg; else return jahrj - jahrg - 1; end if; end alter_jahre;
Methoden zur Sortierung 27.03.2017 Methoden zur Sortierung ORDER BY bei zusammengesetztem Typ nicht möglich Definiere eigene Sortierfunktion Analog zu Methodendefinition Zwei Formen: Map-Funktion Order-Funktion
Beispiel Map-Funktion 27.03.2017 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;
Mehrwertige Attribute durch geschachtelte Tabellen 27.03.2017 Mehrwertige Attribute durch geschachtelte Tabellen Dr. Franz Gmeiner Panoramastr. 80 88255 Baienfurt Telefon: 0751/552515 0751/501-9733 18. 7. 1965 Prof. Sepp Holzer Buchenallee 80 88111 Biergarten Telefon: 0751/55756 0751/501-9734 0171/987654 8. 8. 1955
Beispiel: mehrwertige Attribute 27.03.2017 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;
Referenzen auf andere Objekte 27.03.2017 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
Referenzen Jedes Objekt hat Objektidentifikator 27.03.2017 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
Beispiel für Referenzen 27.03.2017 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));
Einfügen in Objekttabellen: Konstruktoren 27.03.2017 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);
SELECT über Objekte Select p.adresse.ort from personen p 27.03.2017 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.