objekt-relationale Datenbanken

Werbung
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
Herunterladen