1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

46
1 Teil I Teil I Datenmodelle Datenmodelle Kapitel 8: Objektrelationale Modelle

Transcript of 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

Page 1: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

1

Teil ITeil I

DatenmodelleDatenmodelle

Kapitel 8: Objektrelationale Modelle

Page 2: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

2 Relationales Datenmodell ist beherrschend:

Riesige Datenbestände und damit hohe Investitionen. Die große Mehrzahl der Anwendungen arbeitet mit

weitgehend strukturierten Daten. Das relationale Modell ist einfach in der Handhabung durch

Nicht-Experten. Das relationale Modell ist wohlfundiert, die Architektur und

Implementierung der Systeme folgt allgemein akzeptierten Regeln und ist ausgereift.

Mit SQL besteht ein Sprachstandard mit Vorbildfunktion für viele andere Datenmodelle.

Überwinden der Schwächen durch Anbinden anderer Datenmodelle an Tupelkomponenten. Einbetten entsprechender Sprachkonstrukte in relationale

Anfragen.

Motivation

Page 3: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

3

Kapitel 8.1: Typen und Prozeduren in SQL99

Page 4: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

4Polymorphe Typen

User-defined types (UDT): Vereinbarung der Struktur.Polymorphe Typen

tupel ::= [sel:Typ, ..., sel:Typ]relation ::= {tupel}

Typ: Vereinigungsmenge aus atomaren und konstruierten Typen.

Es lassen sich beliebig kompliziert verschachtelte Tupelstrukturen vereinbaren.

User-defined functions (UDF): Monomorphe Operatoren.

Im Allgemeinen: Getrennte Vereinbarung der Operatoren. Bindung an Typ nur lose, indem der Typ als nicht besonders

ausgezeichneter Parametertyp vorkommt.

Page 5: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

5UDT (1)

Stufenweiser Aufbau möglich. Sei create type Punkt as

(x real,y real,z real);

Kopiersemantik (embedding):create type Kante as

(P1 Punkt,P2 Punkt );

Referenzsemantik (linking):create type Kante as

(P1 ref (Punkt),P2 ref (Punkt) );

ref-Attribute nehmen Objektidentifikatoren auf. Es erfolgt automatische Dereferenzierung.

Page 6: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

6UDT (2)

Kopiersemantik Referenzsemantik

P1: x: 4.0

y: 0.0

z: 0.0

P2: x: 2.0

y: 0.0

z: 0.0

P1: x: 2.0

y: 0.0

z: 0.0

P2: x: 2.0

y: 0.0

z: 1.0

x: 4.0

y: 0.0

z: 0.0

x: 2.0

y: 0.0

z: 0.0

x: 2.0

y: 0.0

z: 1.0

P1: @ P2: @

P1: @ P2: @

Page 7: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

7Vereinbarung von Relationen

Relationenvereinbarung statt über Tupelkonstruktion auch über einen bereits über create type vereinbarten tupelorientierten Datentyp.create table PunktTabelle

of Punkt;

create table KantenTabelleof Kante;

Zur Erinnerung: Ist t tupelorientierter Datentyp, so besitzt die Relation den impliziten Typ set(t).

Page 8: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

8Geschachtelte Tupel

Kopiersemantik führt auf geschachtelte Tupel, sofern die Tupelkomponenten selbst wieder tupelartig sind.

Beispiel:create type Punkt as

(x real,y real,z real);

create type Kante as(P1 Punkt,P2 Punkt );

create table PunktTabelleof Punkt;

create table KantenTabelleof Kante;

P1 Punkt (x real, y real, z real),P2 Punkt (x real, y real, z real)

Page 9: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

9

Anfrage an die rekursive Sicht

Rekursionschritt

Basisschritt: Initialisierung der zu konstruierenden Relation

Definition der rekursiv zu konstruierenden Relation (Sicht)

Beispiel:„Flüsse, die direkt oder indirekt in die Nordsee münden.“create table MündetIn as

(primary key (Fluss), Fluss char(25), FlussOderMeer char(25) );

Rekursive Anfrage:with recursive MündetIndirektIn (Fluss, FlussOderMeer) as

(select Fluss, FlussOderMeer from MündetIn where FlussOderMeer = 'Nordsee'

union

select MündetIn.Fluss, MündetIn.FlussOderMeer from MündetIn, MündetIndirektIn where MündetIn.FlussOderMeer = MündetIndirektIn.Fluss )

select Flussfrom MündetIndirektIn;

UDT: Rekursive Anfragen

Bindung an die Relation MündetIn stellt wegen deren Endlichkeit das Abbrechen des Rekursionsverfahrens nach endlich vielen Iterationsschritten sicher.Bindung an die Relation MündetIn stellt wegen deren Endlichkeit das Abbrechen des Rekursionsverfahrens nach endlich vielen Iterationsschritten sicher.

Page 10: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

10

UDF einfach: SQL-ProzedurenCharakteristika: Kapselung von SQL-Anweisungen in Prozeduren, die

wiederholt aufgerufen werden können. Dazu Verbergen parametrisierter SQL-Anweisungen hinter

kurzen Benennungen.Beispiele:create procedure ErmittleArtikelName(in artnr char(8), out aname char(25)) select AName into aname from ArtikelArt where ANr = artnr;Aufruf: z.B. call ErmittleArtikelName(“A-08”, derName)

create procedure ÄndereArtikelName(in artnr char(8), in neuerAName char(25)) update ArtikelArt set AName = neuerAName where ANr = artnr;Aufruf: z.B. call ÄndereArtikelName(“A-08”, “VentileSpezial”)

in Eingabeparameterout Ausgabeparameterinout Beides

relation ArtikelArt(ANr, AName, Menge, Lieferant, Gewicht)

Page 11: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

11

UDF einfach: SQL-FunktionenCharakteristika: Wie SQL-Prozeduren, nur mit einem einzigen

Rückgabeparameter (dem “Funktionswert”). Alle anderen Parameter sind Eingabeparameter. Kann in jedem Ausdruck (z.B. select-Anfrage) verwendet

werdenBeispiel:create function grundfläche( loartnr char(8) ) returns integer

return select Länge Breitefrom LagerortArtwhere LoaNr = loartnr;

Aufruf: z.B.select grundfläche(LoaNr), avg(MaxGewicht)from LagerortArtwhere Höhe > 5group by grundfläche(LoaNr)order by grundfläche(LoaNr);

relation LagerortArt(LoaNr, Länge, Breite, Höhe, MaxGewicht)

Page 12: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

12

Kapitel 8.2: Objekte in SQL99

Page 13: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

13Benutzerdefinierte Datentypen (1)

Spezialfall: Objektdomänen als Zusammenfassung von UDT und UDF: Zustand: Tupelstruktur Verhalten: Zugriffsfunktionen (Methoden)

Trennung zwischen Methodensignatur und -implementierung

Beispiel:

create type Punkt as

(x real, y real, z real)

method Punkt (x real, y real, z real) returns Punkt,

method addition (p Punkt) returns Punkt,

method distanz (p Punkt) returns real,

method nullDistanz () returns real;

Initialisierungsmethode:Aufruf zur Erzeugungneuer Objekte

Page 14: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

14

SQL99: Imperative Programmierung

Charakteristika: Loslösen vom streng deskriptiven Ansatz aus SQL-92 Ausbau des Prozedurkonzepts zu voller (imperativer)

Programmiersprache: declare: (Lokale) Variablendeklarationen begin ... end: Anweisungsblöcke if und case: Bedingte Anweisungen while und loop: Schleifen

Page 15: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

15Benutzerdefinierte Datentypen (2)

Implementierungen der Methoden:

create method Punkt (x real, y real, z real) for Punktbegin

set self.x = x;set self.y = y;set self.z = z;return self;

end;

create method addition (p Punkt) for Punktreturn Punkt ( self.x + p.x, self.y + p.y, self.z + p.z );

create method distanz (p Punkt) for Punktbegin

declare dx real;declare dy real;declare dz real;set dx = self.x - p.x;set dy = self.y - p.y;set dz = self.z - p.z;return ( sqrt ( dx dx + dy dy + dz dz ) );

end;

create method nullDistanz () for Punktreturn self.distanz ( Punkt (0.0, 0.0, 0.0) );

self Objektbezeichner, an denjeweils die Methode zurLaufzeit gebunden wird

Page 16: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

16

Erlaubt mengenwertige

Ergebnis-Komponente.

SQL99-Anfragen (1) In SQL-Ausdrücken können Methoden aus

benutzerdefinierten Datentypen sowie globale Funktionen freizügig verwendet werden.

Die select-Klausel erlaubt jetzt auch das Auftreten von SQL-Anweisungen zur Berechnung von Ergebnisattributen.

Beispiel:„Punkte außer Nullpunkt samt ihren Abständen zu allen

Punkten außer Nullpunkt, sofern Abstand größer als 5 ist“:

select P1.x, P1.y, P1.z,select P2.distanz(P1)from PunktTabelle P2where P2.distanz(P1) > 5.0and P2.nullDistanz() <> 0.0

from PunktTabelle P1where P1.nullDistanz() <> 0.0;

Page 17: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

17

SQL-99 gestattet Typhierarchien mit Einfachvererbung. Vererbt werden Attribute und Methodenimplementierungen.

Beispiel:create type GeoKörper as

(Bezeichnung char(20), Farbe char(20), Material Materialtyp)

method dichte() returns real;

create type Zylinder under GeoKörper as

(Radius real, Mittelpunkt1 Punkt, Mittelpunkt2 Punkt)

method länge() returns real,

method volumen() returns real,

method masse() returns real,

method translation(p Punkt) returns Zylinder;

Typhierarchie und Vererbung (1)

Page 18: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

18

Typhierarchie und Vererbung (2) Vererbung auf Typebene impliziert nicht eine

Mengeninklusions-Semantik auf Ausprägungsebene. Daher ist mittels under-Klausel die Mengeninklusions-

Semantik eigens anzugeben:

create table GeoKörperTabelleof GeoKörper;

create table ZylinderTabelleunder GeoKörperTabelleof Zylinder

Nur so führt das Ablegen eines Tupels in ZylinderTabelle automatisch zum Ablegen entsprechend gekappter Daten in GeoKörperTabelle.

Page 19: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

19

Kapitel 8.3: Erweiterbare Datenbanksysteme

Page 20: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

20Aktuelle Entwicklungen

Erweiterbare Datenbanksysteme: Spezifische UDT/UDF-Kombinationen in allgemeiner Form als Einschübe: Data Cartridges (Oracle) Data Extenders (IBM DB2)

Angebotene Standardlösungen für text: Dokumentrecherche und –verarbeitung spatial: Verarbeitung räumliche Daten xml: XML mit xpath Data Warehouse: Datenwürfel mit cube-Operator.

Ergänzung der Anfragesprachen um entsprechende Elemente. Zum Teil Gegenstand der Standardisierung von SQL99.

Umsetzung auf Relationen oder native Lösungen auf Basis LOB.

Page 21: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

21

FHGremminger

Page 22: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

22

Kapitel 8.4: Mengenwertige Attribute

Page 23: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

23Arrays

Charakteristika: Innerhalb der Tupelkonstruktion eines Datentyps können Attribute

mengenwertig mittels eines Arrays sein. Hierzu existiert der Typkonstruktor array[n], wobei n die maximale

Anzahl von Elementen angibt. Arrays von Arrays, also mehrdimensionale Arrays, sind nicht

erlaubt. Andere Kollektionstypen (set, multiset, list) kommen vermutlich

erst im nächsten Standard.

Beispiele:create type Fläche as (

Kanten ref(Kante) array[1024]);

create type Vielflächner as (Flächen Fläche array[512]);

Array von Objektreferenzen

Array von Objektliteralen

Page 24: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

24Geschachtelte Relationen

Sonderfall:create type Fläche as (

Kanten ref(Kante) array[1024]);

create table GeoKörperTabelle as (GeoName char(20),Flächen Fläche array[512]);

Array von Objektreferenzen

Array von Arrays

Page 25: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

25SQL99-Anfragen (2)

Die select-Klausel erlaubt jetzt auch das Auftreten von SQL-Anweisungen zur Berechnung von Ergebnisattributen.

Aggregierungen sind jetzt auch über mengenwertigen Attributen definiert.

Beispiel:„Namen der gespeicherten geometrischen Körper zusammen

mit der jeweiligen Zahl ihrer Flächen“:

create table GeoKörperTabelle as (GeoName char(20),Flächen Fläche array[512]);

select GeoName,select count()from Flächen

from GeoKörperTabelle;

Ein mengenwertiges Attribut stellt so etwas wie eine vorausberechnete Gruppierung dar, auf die hier eine Aggregierung angewendet wird.

Page 26: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

26

Kapitel 8.5: NF2-Relationen

Page 27: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

27

Polymorphe Typen (1)NF2-Relationen als Modell geschachtelter Relationen:Domänen: Wie im herkömmlichen Relationenmodell sind die Mengen

D1,...,Dm die (atomaren) Domänen. Zusätzlich ist die Menge C der komplexen Domänen unter

Zuhilfenahme der atomaren Domänen Dj wie folgt definiert:

1. Basis: Für jede atomare Domäne Dj gilt: Dj C. Jede atomare Domäne ist also auch eine komplexe Domäne.

2. Potenzmengenbildung: Wenn C1, C2, ..., Ck C, so auch (C1 × C2 × ... × Ck) C.Mengenwertige Domänen lassen sich aus bestehenden Domänen unter Ausnutzung des Prinzips der Potenzmengenbildung () zusammensetzen.

3. Abschluss: Genau durch die vorigen Vorschriften ist C vollständig konstruierbar.

Page 28: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

28

Polymorphe Typen (2)Relation: Eine n-stellige Relation R ist weiterhin Teilmenge eines

kartesischen Produkts von Domänen. R C1 × ... × Cn mit n komplexen Domänen Ci C, 1 i

n (R (C1 × C2 × ... × Cn) ).

Page 29: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

29

Anwendung Geometrische Objekte (1)

(4.0,1.5,1.0)

(2.0,0.0,0.0)

zy

x

Page 30: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

30

Anwendung Geometrische Objekte (2)

Beispiel: Modellierung geometrischer Körper: Atomare Domänen.

domain GeoName: Zeichen(20);domain FID, KID, PID: Zeichen(8);domain X, Y, Z: Gleitkommazahl;

Komplexe Domänen:

domain GeoPunkt: (PID × X × Y × Z);domain GeoKante: (KID × GeoPunkt);domain GeoFläche: (FID × GeoKante);

relation NF2GeoKörper(GeoName, GeoFläche)

Page 31: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

31

Extension für einen Quader:

Anwendung Geometrische Objekte (3)

GeoPunktPID X Y ZP-701 4.0 0.0 0.0P-702 2.0 0.0 0.0P-703 2.0 0.0 1.0P-704 4.0 0.0 1.0P-705 2.0 1.5 1.0P-706 2.0 1.5 0.0P-707 4.0 1.5 1.0P-708 4.0 1.5 0.0

GeoKörperGeoName FIDQuader77 F-701Quader77 F-702Quader77 F-703Quader77 F-704Quader77 F-705Quader77 F-706

GeoFläche

FID KID

F-701 K-701

F-701 K-702

F-701 K-703

F-701 K-704

F-702 K-704

F-702 K-708

F-702 K-710

F-702 K-712

F-703 K-705

F-703 K-706

F-703 K-707

F-703 K-708

F-704 K-701

F-704 K-705

F-704 K-711

F-704 K-712

F-705 K-703

F-705 K-707

F-705 K-709

F-705 K-710

F-706 K-702

F-706 K-706

F-706 K-709

F-706 K-711

GeoKanteKID PIDK-701 P-701K-701 P-702K-702 P-702K-702 P-703K-703 P-703K-703 P-704K-704 P-701K-704 P-704K-705 P-706K-705 P-708K-706 P-705K-706 P-706K-707 P-705K-707 P-707K-708 P-707K-708 P-708K-709 P-703K-709 P-705K-710 P-704K-710 P-707K-711 P-702K-711 P-706K-712 P-701K-712 P-708

NF2GeoKörperGeoFläche

GeoKante

GeoPunkt

GeoName

FID

KID

PID X Y ZP-701 4.0 0.0 0.0K-701

P-702 2.0 0.0 0.0P-702 2.0 0.0 0.0K-702

P-703 2.0 0.0 1.0P-703 2.0 0.0 1.0K-703

P-704 4.0 0.0 1.0P-701 4.0 0.0 0.0

F-701 K-704

P-704 4.0 0.0 1.0P-701 4.0 0.0 0.0K-704

P-704 4.0 0.0 1.0P-707 4.0 1.5 1.0K-708

P-708 4.0 1.5 0.0P-704 4.0 0.0 1.0K-710

P-707 4.0 1.5 1.0P-701 4.0 0.0 0.0

F-702 K-712

P-708 4.0 1.5 0.0:

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-705 2.0 1.5 1.0K-706 P-706 2.0 1.5 0.0

P-703 2.0 0.0 1.0K-709 P-705 2.0 1.5 1.0

P-702 2.0 0.0 0.0

Quader77

F-706 K-711

P-706 2.0 1.5 0.0

Page 32: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

32

Anwendung Geometrische Objekte (4)NF2GeoKörper

GeoFlächeGeoKante

GeoPunkt

GeoName

FID

KID

PID X Y ZP-701 4.0 0.0 0.0K-701

P-702 2.0 0.0 0.0P-702 2.0 0.0 0.0K-702

P-703 2.0 0.0 1.0P-703 2.0 0.0 1.0K-703

P-704 4.0 0.0 1.0P-701 4.0 0.0 0.0

F-701 K-704

P-704 4.0 0.0 1.0P-701 4.0 0.0 0.0K-704

P-704 4.0 0.0 1.0P-707 4.0 1.5 1.0K-708

P-708 4.0 1.5 0.0P-704 4.0 0.0 1.0K-710

P-707 4.0 1.5 1.0P-701 4.0 0.0 0.0

F-702 K-712

P-708 4.0 1.5 0.0:

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-705 2.0 1.5 1.0K-706 P-706 2.0 1.5 0.0

P-703 2.0 0.0 1.0K-709 P-705 2.0 1.5 1.0

P-702 2.0 0.0 0.0

Quader77

F-706 K-711

P-706 2.0 1.5 0.0

NF2GeoKörper enthält (hier) lediglich ein Tupel für den Quader Quader77.

Dieses Tupel verfügt im Attribut GeoFläche über eine Menge von sechs (Unter-)Tupeln, für jede Fläche des Quaders eine.

Ein Flächen-Tupel schachtelt im Attribut GeoKante eine Menge von je vier weiteren Tupeln, die die Kanten der jeweiligen Fläche darstellen.

Jede Kante verfügt im Attribut GeoPunkt über eine Menge von zwei Punkten.

Redundanzen!

Page 33: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

33

Polymorphe Operatoren: Notation (1)Komposition einer Attributfolge: Sei R Rn eine n-stellige Relation. Sei X = (X1, ..., Xk) AR eine Attributfolge mit Domänen C(X1),

C(X2), ..., C(Xk) für X1, X2, ..., Xk. Zu jedem solchen X definieren wir ein neues, dazu

korrespondierendes Attribut:X ::= X1X2...Xk$

Es besitzt die Domäne:C(X) = C(X1) × C(X2) × ... × C(Xk).

Namensgebung: X1X2...Xk$ ist spezielle Namensgebung, so gewählt damit sie

mit bestehenden Benennungen kollidiert. X ist passend gewählte Kurzschreibweise.

Im Beispiel GeoPunkt ::= PID X Y Z$ das zu der Folge (PID, X, Y, Z) korrespondierende Attribut.

Page 34: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

34

Polymorphe Operatoren: Notation (2)Dekomposition eines Attributs:Nach dem gleichen Prinzip in umgekehrter Richtung: Gegeben: zusammengesetztes Attribut

X ::= X1X2...Xk$mit Domäne:C(X) = C(X1) × C(X2) × ... × C(Xk)

Dann ist die Dekomposition in k Attribute X1, ..., Xk definiert. Im Beispiel ist die Folge (PID, X, Y, Z) die Dekomposition

von GeoPunkt (::= PID X Y Z$).

Page 35: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

35Nest-Operator (1)

Charakterisierung: Entstehungsoperation für NF2-Relationen als

Gruppierungsoperation für Attribute

Definition: Sei R Rm , X AR mit X = (X1, X2, ..., Xk), und

Y = AR \ {X1, ..., Xk}.

Sei X ::= X1X2...Xk$ AR eine (Attribut-)Benennung.

Für jedes Tupel g Y(R) definieren wir ein (m - k + 1)-Tupel wg wie folgt: Y({wg}) = {g}, und

X({wg}) = {X({r}) | r R Y({r}) = {g} }.

Dann X(R) := { wg | g Y(R) }.

Page 36: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

36Nest-Operator (2)

Veranschaulichung: Nest-Operator entspricht dem Gruppierungsoperator .

Jedoch andere Schreibweise: Bei X(R) wird nach den Attributen Y = AR \ { X1, ..., Xk } gruppiert, also nach den

Attributen, die nicht in X enthalten sind. Für jeweils gleiche Werte in Y werden die jeweiligen Werte

von X gesammelt. Diese werden konzentriert in die (neue) Spalte X überführt und

geschachtelt dargestellt. Die ursprüngliche Attributfolge X verschwindet aus der

Ergebnisrelation.

Page 37: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

37Nest-Operator: Beispiel (1)

PID, X, Y, Z(NF2GeoKörper''')

NF2GeoKörper''

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0Quader77

F-701

K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0Quader77

F-701

K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0Quader77

F-701

K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0Quader77

F-702

K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0Quader77

F-702

K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0Quader77

F-706

K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0Quader77

F-706

K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0Quader77

F-706

K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0Quader77

F-706

K-711

P-706 2.0 1.5 0.0

NF2GeoKörper'''

GeoName

FID

KID

PID

X

Y

Z

Quader77 F-701 K-701 P-701 4.0 0.0 0.0Quader77 F-701 K-701 P-702 2.0 0.0 0.0Quader77 F-701 K-702 P-702 2.0 0.0 0.0Quader77 F-701 K-702 P-703 2.0 0.0 1.0Quader77 F-701 K-703 P-703 2.0 0.0 1.0Quader77 F-701 K-703 P-704 4.0 0.0 1.0Quader77 F-701 K-704 P-701 4.0 0.0 0.0Quader77 F-701 K-704 P-704 4.0 0.0 1.0Quader77 F-702 K-704 P-701 4.0 0.0 0.0Quader77 F-702 K-704 P-704 4.0 0.0 1.0Quader77 F-702 K-708 P-707 4.0 1.5 1.0Quader77 F-702 K-708 P-708 4.0 1.5 0.0Quader77 F-702 K-710 P-704 4.0 0.0 1.0Quader77 F-702 K-710 P-707 4.0 1.5 1.0Quader77 F-702 K-712 P-701 4.0 0.0 0.0Quader77 F-702 K-712 P-708 4.0 1.5 0.0

:Quader77 F-706 K-702 P-702 2.0 0.0 0.0Quader77 F-706 K-702 P-703 2.0 0.0 1.0Quader77 F-706 K-706 P-705 2.0 1.5 1.0Quader77 F-706 K-706 P-706 2.0 1.5 0.0Quader77 F-706 K-709 P-703 2.0 0.0 1.0Quader77 F-706 K-709 P-705 2.0 1.5 1.0Quader77 F-706 K-711 P-702 2.0 0.0 0.0Quader77 F-706 K-711 P-706 2.0 1.5 0.0

Page 38: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

38Nest-Operator: Beispiel (1)

NF2GeoKörper'

GeoKante

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0

Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0

Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0

Quader77

F-706

K-711 P-706 2.0 1.5 0.0

KID, GeoPunkt(NF2GeoKörper'')

NF2GeoKörper''

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0Quader77

F-701

K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0Quader77

F-701

K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0Quader77

F-701

K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0Quader77

F-702

K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0Quader77

F-702

K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0Quader77

F-706

K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0Quader77

F-706

K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0Quader77

F-706

K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0Quader77

F-706

K-711

P-706 2.0 1.5 0.0

Page 39: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

39Nest-Operator: Beispiel (1)

NF2GeoKörperGeoFläche

GeoKante

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0

F-701 K-704

P-704 4.0 0.0 1.0P-701 4.0 0.0 0.0K-704

P-704 4.0 0.0 1.0P-707 4.0 1.5 1.0K-708

P-708 4.0 1.5 0.0P-704 4.0 0.0 1.0K-710

P-707 4.0 1.5 1.0P-701 4.0 0.0 0.0

F-702 K-712

P-708 4.0 1.5 0.0:

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-705 2.0 1.5 1.0K-706 P-706 2.0 1.5 0.0

P-703 2.0 0.0 1.0K-709 P-705 2.0 1.5 1.0

P-702 2.0 0.0 0.0

Quader77

F-706 K-711

P-706 2.0 1.5 0.0

NF2GeoKörper'

GeoKante

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0

Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0

Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0

Quader77

F-706

K-711 P-706 2.0 1.5 0.0

FID, GeoKante(NF2GeoKörper')

Page 40: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

40Unnest-Operator (1)

Charakterisierung: Zum Nest-Operator inverser Operator: Zerlegung eines Attributs mit

komplexer Domäne in mehrere Felder.

Definition: Sei R Rm , X AR und Y = AR \ {X}.

Falls die Domäne von X atomar ist, d.h. einem Dj entspricht, so

X(R) := R.

Andernfalls sei X ::= X1X2 ... Xk$.

Für jedes Tupel r R definieren wir dann eine Menge von (m + k - 1)-Tupeln: X({r}) := { r' |X(r') X(r) Y(r') = Y(r)}. Diese Tupel sind bezüglich X um eine Hierarchiestufe „entschachtelt“.

Vereinigen dieser Tupelmengen ergibt das Ergebnis: X(R) := rR X({r}).

Page 41: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

41Unnest-Operator (2)

Veranschaulichung: Die Unnest-Operation bezüglich X hebt die Schachtelung

von X auf. Für jeden Einzelwert des Attributs X wird innerhalb eines

(geschachtelten) Tupels ein eigenes Tupel angelegt, dessen andere Attribute mit dem Rest des Originaltupels aufgefüllt werden.

Page 42: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

42Unnest-Operator: Beispiel

NF2GeoKörperGeoFläche

GeoKante

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0

F-701 K-704

P-704 4.0 0.0 1.0P-701 4.0 0.0 0.0K-704

P-704 4.0 0.0 1.0P-707 4.0 1.5 1.0K-708

P-708 4.0 1.5 0.0P-704 4.0 0.0 1.0K-710

P-707 4.0 1.5 1.0P-701 4.0 0.0 0.0

F-702 K-712

P-708 4.0 1.5 0.0:

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-705 2.0 1.5 1.0K-706 P-706 2.0 1.5 0.0

P-703 2.0 0.0 1.0K-709 P-705 2.0 1.5 1.0

P-702 2.0 0.0 0.0

Quader77

F-706 K-711

P-706 2.0 1.5 0.0

NF2GeoKörper'

GeoKante

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0

Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0

Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0

Quader77

F-706

K-711 P-706 2.0 1.5 0.0

GeoFläche(NF2GeoKörper)

Page 43: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

43Unnest-Operator: Beispiel

NF2GeoKörper'

GeoKante

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0

Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0

Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0

Quader77

F-706

K-711 P-706 2.0 1.5 0.0

GeoKante(NF2GeoKörper')

NF2GeoKörper''

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0Quader77

F-701

K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0Quader77

F-701

K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0Quader77

F-701

K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0Quader77

F-702

K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0Quader77

F-702

K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0Quader77

F-706

K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0Quader77

F-706

K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0Quader77

F-706

K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0Quader77

F-706

K-711

P-706 2.0 1.5 0.0

Page 44: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

44Unnest-Operator: Beispiel

GeoPunkt(NF2GeoKörper'')

NF2GeoKörper''

GeoPunkt

GeoName

FID

KID PID X Y Z

P-701 4.0 0.0 0.0Quader77

F-701

K-701 P-702 2.0 0.0 0.0

P-702 2.0 0.0 0.0Quader77

F-701

K-702 P-703 2.0 0.0 1.0

P-703 2.0 0.0 1.0Quader77

F-701

K-703 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-701

K-704 P-704 4.0 0.0 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-704 P-704 4.0 0.0 1.0

P-707 4.0 1.5 1.0Quader77

F-702

K-708 P-708 4.0 1.5 0.0

P-704 4.0 0.0 1.0Quader77

F-702

K-710 P-707 4.0 1.5 1.0

P-701 4.0 0.0 0.0Quader77

F-702

K-712 P-708 4.0 1.5 0.0

:P-702 2.0 0.0 0.0Quader77

F-706

K-702

P-703 2.0 0.0 1.0P-705 2.0 1.5 1.0Quader77

F-706

K-706

P-706 2.0 1.5 0.0P-703 2.0 0.0 1.0Quader77

F-706

K-709

P-705 2.0 1.5 1.0P-702 2.0 0.0 0.0Quader77

F-706

K-711

P-706 2.0 1.5 0.0

NF2GeoKörper'''

GeoName

FID

KID

PID

X

Y

Z

Quader77 F-701 K-701 P-701 4.0 0.0 0.0Quader77 F-701 K-701 P-702 2.0 0.0 0.0Quader77 F-701 K-702 P-702 2.0 0.0 0.0Quader77 F-701 K-702 P-703 2.0 0.0 1.0Quader77 F-701 K-703 P-703 2.0 0.0 1.0Quader77 F-701 K-703 P-704 4.0 0.0 1.0Quader77 F-701 K-704 P-701 4.0 0.0 0.0Quader77 F-701 K-704 P-704 4.0 0.0 1.0Quader77 F-702 K-704 P-701 4.0 0.0 0.0Quader77 F-702 K-704 P-704 4.0 0.0 1.0Quader77 F-702 K-708 P-707 4.0 1.5 1.0Quader77 F-702 K-708 P-708 4.0 1.5 0.0Quader77 F-702 K-710 P-704 4.0 0.0 1.0Quader77 F-702 K-710 P-707 4.0 1.5 1.0Quader77 F-702 K-712 P-701 4.0 0.0 0.0Quader77 F-702 K-712 P-708 4.0 1.5 0.0

:Quader77 F-706 K-702 P-702 2.0 0.0 0.0Quader77 F-706 K-702 P-703 2.0 0.0 1.0Quader77 F-706 K-706 P-705 2.0 1.5 1.0Quader77 F-706 K-706 P-706 2.0 1.5 0.0Quader77 F-706 K-709 P-703 2.0 0.0 1.0Quader77 F-706 K-709 P-705 2.0 1.5 1.0Quader77 F-706 K-711 P-702 2.0 0.0 0.0Quader77 F-706 K-711 P-706 2.0 1.5 0.0

Page 45: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

45Unnest-Operator (3)

Anmerkung: Die letzte Relation entspricht gerade der Relation, die man

erhalten würde, wenn die Relationen der ursprünglichen Extension durch Join miteinander kombiniert würden:

NF2GeoKörper''' =    

GeoKörper⋈GeoFläche⋈GeoKante⋈GeoPunkt. Wir haben damit belegt, dass der Informationsgehalt der vier

Relationen GeoKörper, GeoFläche, GeoKante und GeoPunkt durch die Relation NF2GeoKörper vollständig abgedeckt ist.

Auf NF2-Relationen lässt sich eine erweiterte relationale Algebra definieren.

Page 46: 1 Teil I Datenmodelle Kapitel 8: Objektrelationale Modelle.

46Unnest-Operator (5)

Anmerkung:

Der Unnest-Operator wird benötigt, um den Zugriff auf Teilkomponenten eines Attributs mit komplexer Domäne zu ermöglichen,

wenn (nur) diese Angaben in der Ergebnismenge oder zur Weiterverarbeitung benötigt werden.