190 likes | 301 Views
objekt-relationale Datenbanken. Die objekt-relationale Datenbank ORACLE 9i. 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.
E N D
objekt-relationale Datenbanken Die objekt-relationale Datenbank ORACLE 9i
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 Tupel-Tabelle Personen Objekt-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, ...
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 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 table personen of person_typ;
Dr. Franz Gmeiner Panoramastr. 80 88255 Baienfurt 18. 7. 1965 Studenten 12345 Hirschgraben 8 88212 Ravensb. AI Sarah Heimer 18. 4. 1980 Vererbung, Klassenhierarchien Personen
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. 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
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 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 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-97340171/987654 8. 8. 1955
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 tablepersonenofperson_typ nested tabletelefonliste store asperson_telefonnrn;
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 • 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 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 insert intopersonenvalues (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 where p.name.titel = 'Prof.' p ist Variable für Objekte der Klasse Person_typ.