2.4 Relationenmodell

Das Relationenmodell wurde 1970 von Codd entwickelt. Es repräsentiert die Daten einer Datenbank als eine Menge von Relationen. Eine Relation können wir uns dabei als Tabelle vorstellen, der Zeilen Objekte oder Beziehungen zwischen Objekten beschreiben. Der Tabellenkopf heißt Relationenschema, die einzelnen Spalten werden als Attribute bezeichnet, die einzelnen Zeilen als Tupel.

Restaurant

IDNamePLZ
R1Mc3300
R2Hw3300
R3Kb3300

„Restaurant“ ist ein Relationenschema. ID, Name, PLZ ist Attribut, R1/Mc/3300 etc. sind Tupel

2.4.1 Formalisierung

Ein Relationenschema R ist eine endliche Menge von Attributnamen {A1, A2, …. An}. Zu jedem Attributnamen A1 gibt es eine Menge Di, 1 ≤ i ≤ n, den Wertebereich (=domain) von Ai, der auch mit Dom(Ai) bezeichnet wird.

Eine Relation r(R) auf einem Relationenschema R ist eine endliche Menge von Abbildungen {t1,….,tm} von R nach D. Die Abbildungen werden Tupel genannt.

Bsp.: Relationenschemata für RESTAURANT und SPEISE

Restaurant = {rnr,name,adresse,haube,typ}
Speise     = {name,preis,rnr}
rnrnameadressehaubetyp
1
2
3„Green Cottage“„Kettenbrückengasse 3, 1050 Wien“ 2 „chinesisch“
4


Bsp.: Domänen für das Relationenschemata RESTAURANT:

Dom(rnr)   = Menge aller Integer
Dom(name)  = Menge aller Namen
Dom(haube) = {k|0<=k<=4}


Bsp.: Die Tabelle Restaurant hat mehrere Tupel. Eines von ihnen ist t3 mit:

t3            = 3, "Green Cottage", "Kettenbrückengasse 3, 1050 Wien", 2, "chinesisch" 
t3(rnr)       = 3
t3(name)      = "Green Cottage"
t3(haube,typ) = 2, "chinesisch"


Ein Schlüssel einer Relation r(R) ist eine Teilmenge K von R, sodass für zwei verschiedene Tupel t1 und t2 aus r(R) immer t1(K) != t2(K) gilt und keine echte Teilmenge K' von K diese Eigenschaft hat.

Im Allgemeinen wird dabei ein Schlüssel als Primärschlüssel ausgezeichnet und in den Relationenschemata durch Unterstreichen der Schlüsselattribute gekennzeichnet.
Bsp.:

Restaurant = {__rnr__, name, adresse, haube, typ}
Speise     = {__name__, preis, rnr} 

2.4.2 Operationen auf Relationen

Um Operationen auf Relationen durchführen zu können, wurde die relationale Algebra eingeführt.

2.4.2.1 Mengenoperationen

Zu den Mengenoperationen gehören:

von Relationen, die über der gleichen Attributmenge mit derselben Anordnung (identische Reihenfolge der Attribute) definiert sind:

Bsp.: Es sind 2 Relationen r und s gegeben:

r

ABC
a1b1c1
a1b2c1
a2b1c2


s

ABC
a1b2c1
a2b2c1
a2b2c2



Gesucht sind:



Lösung:


ABC
a1b2c1



ABC
a1b1c1
a1b2c1
a2b1c2
a2b2c1
a2b2c2



ABC
a1b1c1
a2b1c2



ABC
a2b2c1
a2b2c2


2.4.2.2 Die Selektion ("σ")

Bei der Selektion werden Zeilen ausgewählt, die einem bestimmten Kriterium entsprechen:

$ σ_{A=a}(r) = \{ t∈r|t(A)=a \} $

Beispiele:
a) $ σ_{A=a1}(r) = ? $

ABC
a1b1c1
a1b2c1


b) $ σ_{A=a1}(s) = ? $

ABC
a1b2c1


Noch allgemeiner wird die Selektion, wenn wir erlauben, wohldefinierte Operatoren auf den Attributwerten auszuführen, z.B.: arithmetische Operationen auf Zahlenwerte und logische Verknüpfungen von Attributen durch „und“ („∧“), „oder“ („∨“) und Negationen („¬“).

c) $ σ_{(B=b1)∧¬(A=a1)}(r)=? $
1. Schritt:
$ σ_{(B=b1)}(r)=? $

ABC
a1b1c1
a2b1c2


2. Schritt: $ σ_{(B=b1)∧¬(A=a1)}(r)=? $

ABC
a2b1c2



d) $ σ_{( haube > 1) ∧ ¬(typ="österreichisch" ∨ typ="international")}(Restaurant)=? $

Bsp: Relation Restaurant

rnrnameadressehaubetyp
1SchnitzelhausAmstetten1österreichisch
2BrauhofAmstetten3international
3Pizza HollywoodAmstetten2italienisch



Lösung ⇒ Folgender Tupel:

3Pizza HollywoodAmstetten2italienisch

2.4.2.3 Die Projektion ("π")

Bei der Projektion werden gewisse Spalten einer Tabelle ausgewählt. Man projiziert nach einer Teilmenge der Attribute:

$π_X(r) = \{t(X)|t∈r\} für X ⊆ R $


Beispiele:

e) $ π_{A,B}(r)=? $

f) $ π_{name,adresse,haube}(Restaurant)= ?? $

nameadressehaube
SchnitzelhausAmstetten1
BrauhofAmstetten3
Pizza HollywoodAmstetten2

2.4.2.4 Der Verbund

2.4.2.4.1 Der natürliche Verbund

Der Verbundoperator verknüpft zwei Relationen über ihre gemeinsamen Attribute:

$ r ⋈ s = \{|\{R,S\}| ∃ t_r ∈ r \text{ und } ∃ t_s ∈ s:t_r =t(R) \text{ und } t_s=t(S) \} $

Der Verbundoperator ist kommutativ.

Beispiel:
Relation r

AB
a1b1
a2b1
a3b2



Relation s

BC
b2c1
b2c2
b1c3
b3c4



Relation r ⋈ s

ABC
a1b1c3
a2b1c3
a3b2c1
a3b2c2


Aufgabe:

 Restaurant ⋈ Speise 


Lösung:

rnrnameadressehaubetyppreis



Erklärung:
Der natürliche Verbund verknüpft beide Relationen über die gemeinsamen Attribute und gibt daher jene Tupel aus, bei denen sowohl der Name name des Restaurants und der Name name der Speise als auch die Restaurantnummer rnr des Restaurants und jene der Speise gleich sind. In unserem Fall ist das die leere Menge!

Projektionseigenschaften des Verbundoperators

Seien R und S zwei Relationenschema, $ q=r⋈s $ und $ r'=π_R(q) $, dann gilt $ r'⊆r $. Joinen wir also eine Relation r mit einer anderen und projizieren dann nach den ursprünglichen Attributen von r, so können unter Umständen Tupel verloren gehen.

Beispiel:

Relation r

AB
ab
ab'


Relation s

BC
bc



Relation r⋈s=q

ABC
abc



Relation $ π_{AB}(q)=r' $

AB
ab

2.4.2.4.2 Das Kartesische Produkt

Falls $R ∩ S = \{\}$,die beiden Relationenschemata also kein gemeinsames Produkt haben, so liefert die Verknüpfung r ⋈ s das Kartesische Produkt, geschrieben als r x s.

Beispiel:
Relation r

AB
a1b1
a2b1


Relation s

CD
c1d1
c2d1
c2d2


Relation r x s = r ⋈ s

ABCD
a1b1c1d1
a1b1c2d1
a1b1c2d2
a2b1c1d1
a2b1c2d1
a2b1c2d2



Wie wir oben gesehen haben, ist das Kartesische Produkt nur für den Fall definiert, dass $R ∩ S=\{\}$. Möchte man das Kartesische Produkt von Relationen bilden, die gemeinsame Attribute haben, so müssen diese in einer der Relationen umbenannt werden. Ist etwa R = {A,B,C} und S = {A,B,D}, so benennen wir die Attribute von S um, so dass S={A',B',D} oder kennzeichnen sie durch Voranstellen des Relationennamens, also S={S.A,S.B,D}.

2.4.2.4.3 Weitere Verbundarten

Weitere Verbundarten sind:

2.4.2.5 Division

Möchte man die Relation r durch s dividieren, so muss die Attributmenge von s eine Teilmenge der Attributmenge von r sein. Das Ergebnis hat die Differenz der Attributmengen als Attribute und wählt jene Tupel aus r aus, die eingeschränkt auf die Differenz der Attribute R-S für alle Tupel aus s denselben Wert haben.

Beispiel:
Relation R

ABCD
abcd
abef
bcef
edcd
abde
edef
adef



Relation S

CD
cd
ef



Relation R % S

AB
ab
ed

Sowohl bei |a|b| als auch bei |e|d| kommen beide Tupel der Relation S, nämlich |c|d| und |e|f| vor.