1
Teil ITeil I
DatenmodelleDatenmodelle
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
3
Kapitel 8.1: Typen und Prozeduren in SQL99
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.
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.
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: @
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).
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)
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.
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)
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)
12
Kapitel 8.2: Objekte in SQL99
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
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
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
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;
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)
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.
19
Kapitel 8.3: Erweiterbare Datenbanksysteme
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.
21
FHGremminger
22
Kapitel 8.4: Mengenwertige Attribute
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
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
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.
26
Kapitel 8.5: NF2-Relationen
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.
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) ).
29
Anwendung Geometrische Objekte (1)
(4.0,1.5,1.0)
(2.0,0.0,0.0)
zy
x
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)
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
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!
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.
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$).
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) }.
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.
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
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
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')
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}).
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.
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)
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
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
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.
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.