• Keine Ergebnisse gefunden

Operatoren der Relationenalgebra

2. Das relationale Modell und die Normalform

3.1. Operatoren der Relationenalgebra

Die relationale Algebra ist prozedural orientiert, d.h. ein relationenalgebraischer Ausdruck enthält implizit einen Bearbeitungsplan, wie die Anfrage auszuwerten ist.

Sie spielt die grössere Rolle bei der Realisierung von Datenbanksystemen. Stehen die Relationen in einer Kollektion, dann kann man im Allgemeinen alle möglichen Mengenoperationen anwenden.

Zunächst werden einige Operatoren der Relationenalgebra kurz erwähnt, dann werden die Operatoren, die Codd in seinem ersten Papier beschrieben hat, eingeführt. Einige dieser Operatoren werden heute nicht mehr verwendet und fast alle hatten damals andere Symbole.

• Selektion (

σ

): Die Tupel (die Zeilen), die das Selektionsprädikat erfüllen, werden bei dieser Operator selektiert.

• Projektion (

Π

): Die Spalten der Tabelle, die als Projektionsprädikat im Ausdruck dargestellt sind, werden hier als Ergebnis ausgegeben.

Supply2

Supplier Part# partColor partweight project S1

• Vereinigung (

U

): Nur zwei Relationen, deren Schemata gleich sind, sind, vereinbar.

• Mengendifferenz (

-

): Falls zwei Relationen R1, R2 gleiche Domänen und Attributnamen haben, kann man durch (R1 – R2 ) die Tupel, die in R1 und nicht in R2 vorkommen, definieren.

• Kreuzprodukt (

X

): Man bildet durch das kartesische Produkt zweier Relationen (R1 X R2) alle möglichen Tupel-Paare aus R1 und R2. Das Schema der Ergebnisrelation (sch(R1XR2)) ist eine Vereinigung aus sch(R1) und sch(R2).

• Umbenennung von Relationen und Attributen (

ρ

):

ρ

v (Relation): V ist der neue Name der Relation.

ρ

v Attribut (Relation): Das Attribut wird zu V umbenannt.

• Der Verbund (

) : (R1

R2) :=

Π

A1,....,An, R1.B1,..., R1.Bk, C1,..,Cm (

σ

R1.b1=R2.B1,...,R1.Bk=R2.Bk (R1 X R2)), mit R1 = { A1, A2, .., B1, ..., Bk, ..An } und R2 = { C1, C2, ..., B1, ..., Bk, Cn }.

• Allgemeine/Theta Join (

θ ): (R1

θ R2) :=

σ

θ(R1

X

R2).

Man selektiert aus den n∗m Tupeln nur die Zeilen, die eine beliebige Bedingung bzw. ein beliebiges Prädikat

θ

erfüllen.

• Mengenduchschnitt (

): R1

R2 := R1 – (R1 – R2).

• Die relationale Division (

÷

): Für die Durchführung der Division (R1÷ R2) muss gelten, dass R2 eine Teilmenge von R1 ist. Dann ist das Ergebnisschema als Mengendifferenz zu definieren, also nur die Attribute, die in R1 und nicht in R2

enthalten sind, werden ausgegeben.

Zunächst werden die Operatoren aus dem Papier [Codd 1970] eingeführt.

3.1.1. Permutation

Eine binäre Relation hat eine Array-Repräsentation mit zwei Spalten. Vertauscht man die Spalten, so bekommt man eine Spiegelung der Relation. I. a. erhält eine n-stellige Relation n! = n(n-1)(n-2)....*2*1 Instanzen, wenn man ihre Attribute permutiert, (die Identität und die Spiegelung sind eingeschlossen). Das Beispiel supply in Bild 2. hat 4! = 24 Permutationen. Weil das relationale Modell keine sortierten Listen enthält, ist der Gebrauch von diesem Operator nicht mehr nötig. In seltenen Fällen kann die Permutation durch die Projektion und ein passendes Prädikat als Subskript ausgedrückt werden. Indem man Relationen ohne ihre Permutationen speichert, gewinnt man an Speicherkapazität. Dies zählt zu den

3.1.2. Projektion

Die Spalten der Tabelle werden hier als Ergebnis ausgegeben. Die Projektion ist durch das griechische

Π

bezeichnet und hat als Projektionsprädikat nur die Menge der Attribute, die projiziert sein sollen. I. a. verzichtet man auf die Mengenklammern.

Beispiel: Allgemein

Π

Prädikat (Relation), Konkret

Π

project, supplier (supply)

Π

project, supplier (supply)

Project Supplier 5

5 1 7

1 2 4 2 Abb.5 permutierte Projektion

Im konkreten Beispiel wurde gleichzeitig permutiert und projeziert.

3.1.3. Der relationale Verbund (Join)

Der Verbund ( Join ) zweier Argumentrelationen R1 und R2, (R1 * R2) hat insgesamt n + m + k Attribute, wenn R1 und R2 n + k bzw. m + k Attribute haben, und k der Zahl der in beiden Relationen gleichbenannten Attribute. Man kann sich das Ergebnisschema wie folgt veranschaulichen:

R1 * R2: =

Π

A1,...An, R1.B1,..., R1.Bk, C1,…, Cm(

σ

R1.B1 = R2.B1,...,R1.Bk = R2.Bk(R1

×

R2))

R1

*

R2

R1 – R2 R1∩ R2 R2 – R1

A1 A2 ... An B1 B2 ... Bk C1 C2 ... Cm

Beispiel:

Abb. 6. zwei verbindbare Relationen

R1:= {supplier, part} R2: = {part, project}

Supplier Part Part Project

1 2 2

1 1 2

1 1

2

1 2 1

R1 * R2

Supplier Part Project 1

1 2 2 2

1 1 1 1 2

1 2 1 2 1

Abb. 7. Der natürliche Verbund zwischen R1 und R2

R1 und R2 (in Abb. 6) sind verlustfrei verbindbar, d.h. R1 * R2 := {(s, p, j) | R1:= (s, p) ∧ R2:= (p, j)}. Man kann im Abb.7 sehen, wie die gleichbenannten Attribute nur einmal vorkommen, und dass

Π

s, p (R1 * R2) = R1 und

Π

p, j (R1 * R2) = R2.

3.1.4. Andere Verbunde

Wenn

Π

p, s (R1) oder R2 eine Funktion (n1 oder 11 Relationen) ist, dann kann es keine Ambiguität geben, deshalb ist auch nur ein natürlicher Join möglich. Die Mehrdeutigkeit, welche in der Abb 6. durch jedes Element der Domäne Part erzeugt wird, erklärt die Pluralität der Verbunde. Die Ambiguität in der Verbindung (R1 * R2) kann manchmal mit Hilfe einer dritten Relation T(j, s) gelöst werden. Diese Relation sollte die folgenden Eigenschaften mitbringen:

(1)

Π

1 (T) =

Π

2 (R2),

(2)

Π

2 (T) =

Π

1 (R1),

(3) T (j, s) →∃p (R1 (s, p) ∧ R2 (p, j)), (4) R1 (s, p) →∃J (R2(p, j) ∧ T (j, s)), (5) R2 (p, j) → ∃s (T (j, s) ∧ R1 (s, p)).

Nimmt man an, U = R1 * R2 * T, die sogenannte cyclic 3-Join dann folgt:

Π

12 (U) = R1,

Π

23 (U) = R2, und

Π

31 (U) = T.

Sei

γ

(R) = { (a1, a2, ..., an-1) : R (a1, a2, ……an-1, an) ∧ a1 = an}, dann kann man den natürlichen cyclic 3-Join mit γ(R1 * R2 * T) beschreiben.

Um zwischen cyclic 3-Join und linear 3-Join unterscheiden zu können, definiert man eine 4-stellige Relation V, so dass:

Π

12 (V) = R1,

Π

23 (V) = R2, und

Π

34 (V) = T

Der natürliche linear 3-Join von R1, R2, und T ist wie folgt zu definieren:

R1 * R2 * T = { (a, b, c, d) : R1(a, b) ∧ R2(b, c) ∧ T(c, d) }.

Bemerkung: Der natürliche 2-Join ist assoziativ.

Beispiel:

Abb. 8. Relationen mit mehreren cyclic 3-Joins

Abb. 9. Eine cyclic 3-Join der Relationen in Abbildung 8.

3.1.5. Link (Tie)

Sei eine Relation R = { A1, A2, ..., An }. R wird verknüpft (tied), wenn alle Tupel mit R.A1 ≠ R.An eliminiert werden, d.h. die Restriktion (moderne Bedeutung) von R auf R’ (R’ ⊆ R), mit R’.A1 = R’.An. Der Operator Tie wird mit

γ

betzeichnet.

Beispiel:

R γ R

supplier part supplier part

1

Pluralität der Verbindungen liefert keine Information über die Zahl der R1: = {supplier, part} R2: = {part, project}

Supplier Part Part Project

1 T: = {project, supplier}

Project Supplier

U: = {supplier, part, project}

S P j

Kompositionen. Während man den Join-Operator durch einen Stern (

*

) visualisiert, steht der Punkt (

·

) für die Komposition . Im Beisp. R1

·

R2 =

Π

13 (R1

*

R2).

Weil ein natürlicher Verbund immer möglich ist, gibt es auch immer eine natürliche Komposition.

Die Kompositionen zweier oder mehrerer Relationen sind höchstens so viele wie die Verbindungen. In Abb.12 ist c als Quelle der Mehrdeutigkeit durch die erste Komposition eliminiert worden. Während so viele Joins möglich sind, kann hier nur eine Komposition generiert werden.

R1 R2

Supplier Part Part Project

1

Abb.12 mehrere Verbunde und nur eine Komposition

Das lässt sich auch auf nicht binäre Relationenpaare (auch mit verschiedenen Stelligkeiten) verallgemeinern, in dem man dem oberen Muster folgt und die Relationen paaweise verbindet.

Eine schlechte Anwendung der Komposition führt zu Fehlern. Im Beispiel supply möchte man herausfinden, welche Projekte von welchem Lieferant stammen, und setzt dabei voraus, dass supplier’s Elemente auf parts verweisen, und part’s Elemente wiederum auf die Projekte zeigen. Nur eine natürliche Komposition zwischen project und supplier kann diese Anfrage korrekt beantworten.

3.1.6. Restriktion

y

x -∞ 0 +∞

F ist definiert in dem Bereich ]-∞, +∞[ , man kann sie aber schlecht beschreiben. Hier bietet sich die Restriction als gute Lösung an. Während F in der Domäne ] -∞, 0] die Form einer Gerade hat (F ( x ≤ o ) = ax + b), steigt F im positiven Bereich exponentiell ( F (x > 0) = exp(x)) an. F ( x ≤ o ), F (x > 0) sind Funktionen.

Analog; ein Relationsteil ist wiederum eine Relation. R1 ist über R2 in R1’ reduziert (restricted), d.h.

Π

L (R1’) =

Π

M (R2) mit |L| = |M| ≤ |R1|, |R2| und R1’ ⊆ R1 (R1’ ist maximal). Man bezeichnet die Restriction mit“ R1L|MR2 “.

Bemerkung: Der SQL-Operator SELECT wird auch mit RESTRICT bezeichnet.

F (x)

Beispiel: R1’ = R1 23|12 R2

Abb. 13 Restriktion