Zum Hauptinhalt springen
Inhaltsverzeichnis

Relationale Algebra

Vom ER-Modell zur relationalen Algebra

Das Entity-Relationship-Modell beantwortet die Frage, welche Objekte und Beziehungen eine Datenbank beschreiben soll — doch mit einem Diagramm lässt sich nicht rechnen. Um tatsächlich mit Daten arbeiten zu können, braucht man eine andere Darstellung: Relationen. Eine Relation ist eine Tabelle mit einem festen Schema aus benannten Spalten (Attributen) und einer Menge von Zeilen (Tupeln). Ein ER-Diagramm lässt sich systematisch in ein solches Relationenschema übersetzen, erst dann können Daten gespeichert und verwaltet werden.

Damit stellt sich die Frage: Wie arbeitet man mit Relationen? Die relationale Algebra gibt darauf eine formale Antwort. Sie definiert eine Menge von Operationen, die Relationen als Eingabe nehmen und wieder eine Relation zurückliefern — wie die gewöhnliche Algebra mit Zahlen. Operationen lassen sich so beliebig schachteln und zu komplexen Anfragen zusammensetzen. Entwickelt wurde die relationale Algebra 1970 von Edgar F. Codd, der damit zugleich das relationale Datenbankmodell begründete.

SQL ist im Kern eine lesbare Schreibweise für relationale Algebra: WHERE = Selektion, SELECT = Projektion, JOIN = Verbund.

In der Praxis schreibt man solche Anfragen in SQL — und SQL ist im Kern nichts anderes als eine lesbare Schreibweise für relationale Algebra: WHERE entspricht einer Selektion, SELECT einer Projektion, JOIN einem Verbund. Wer die Algebra versteht, versteht deshalb nicht nur eine Syntax, sondern das Konzept dahinter.

Relation und Relationenschema

Bevor man mit Operationen arbeiten kann, muss klar sein, womit man es eigentlich zu tun hat. Die folgenden Definitionen bauen aufeinander auf:

BegriffFormalTabellen-entsprechungBeispiel
DomäneMenge zulässiger WerteDatentyp einer Spaltedom(A) = ℤ
Relationen-schemaTabellenstruktur (Spaltennamen)
TupelElement Eine Zeile('Amir', 11)
RelationEndliche Menge von TupelnDie gesamte Tabelle mit Daten

Domäne

Eine Domäne ist eine (nicht leere) Menge zulässiger Werte für ein Attribut — also der Wertebereich, aus dem ein Attribut seine Werte zieht. Beispiele sind:

  • (ganze Zahlen)
  • oder
  • eine konkrete Aufzählung wie .

Jedem Attribut ist genau eine Domäne zugeordnet.

Schema

Ein Relationenschema (Schema) ist eine endliche, geordnete Liste von Attributnamen , denen jeweils eine Domäne zugeordnet ist. Das Schema beschreibt die Struktur einer Tabelle, welche Spalten es gibt und welche Werte darin erlaubt sind, enthält aber selbst noch keine Daten. Man schreibt es zum Beispiel als:

  • Schueler(SID: ℤ, Name: String, Klasse: String, Jahrgang: ℤ)

Spielt die Domäne keine Rolle, wird diese oft auch weggelassen:

  • Schueler(SID, Name, Klasse, Jahrgang)

Tupel

Ein Tupel über dem Schema ist eine Abbildung, die jedem Attribut genau einen Wert aus zuweist:

Beispiele sind:

  • (1, 'Amir', '12a', 2024)
  • (10, 'Inf', 'Fr. Novak')

Relation

Eine Relation über dem Schema ist eine endliche Teilmenge des kartesischen Produkts der Domänen:

Das kartesische Produkt enthält alle denkbaren Kombinationen von Werten aus den Domänen, die Relation ist davon eine Auswahl der tatsächlich gespeicherten Tupel. Zum Beispiel ergibt sich für die Mengen und für das Produkt:

Da eine Relation eine Menge im mathematischen Sinne ist, hat sie zwei wichtige Konsequenzen: Es gibt keine Reihenfolge der Tupel (Zeilen haben keine feste Position), und es gibt keine Duplikate (zwei Tupel, die in allen Attributwerten übereinstimmen, gelten als identisch und kommen nur einmal vor).

Da sich endliche Relationen sehr gut als Tabelle darstellen lassen, werde an vielen Stellen die Begriffe Relation und Tabelle synonym verwendet.

Das Relationenschema ergibt sich direkt aus der Übersetzung des ER-Modells. Jede Entitätsmenge wird zu einem Schema, ihre Attribute bleiben erhalten, und der Primärschlüssel wird übernommen. Beziehungen werden, je nach Kardinalität, entweder als eigene Relation modelliert oder durch einen Fremdschlüssel in einer der beteiligten Relationen ausgedrückt.

Die Grundoperatoren

Damit die Wirkung jeder Operation ohne Umwege ablesbar ist, arbeiten wir in diesem Abschnitt mit kleinen, abstrakten Relationen (, , , , ...) mit einfachen Werten wie oder . Jedes Beispiel nennt zuerst die Eingabe-Relation(en), dann den Ausdruck, dann das Ergebnis. Die Übungsaufgaben am Ende wenden die Operatoren anschließend auf das Schulschema von oben an.

1. Selektion (σ)

Notation:

Das griechische Sigma () steht für „select" — die Selektion wählt Zeilen aus, ohne die Struktur zu verändern. Die Selektion filtert Zeilen einer Relation anhand einer Bedingung. Das Ergebnis enthält nur diejenigen Tupel, für die die Bedingung wahr ist. Das Schema (also die Spalten) bleibt dabei unverändert.

Beispiel: (alle Tupel mit )

R
ABC
1a2
2a2
3c1
1b4
σA=1(R)
ABC
1a2
1b4

Bedingungen können mit (UND), (ODER) und (NICHT) kombiniert werden:

Beispiel:

R
ABC
1a2
2a2
3c1
1b4
σA=2∨B='c'(R)
ABC
2a2
3c1

2. Projektion (π)

Notation:

Das griechische Pi () steht für „project". Die Projektion wählt Spalten aus einer Relation aus. Alle anderen Spalten werden weggelassen. Doppelte Zeilen werden im Ergebnis automatisch entfernt (da eine Relation per Definition eine Menge ist, also keine Duplikate enthält).

Beispiel: (nur die Spalten und )

Die Kombination erscheint nur einmal, obwohl sie in der Eingabe zweimal vorkommt (bei und bei ).
R
ABC
1a2
2a2
3c1
1b4
πB,C(R)
BC
a2
c1
b4

3. Kombination von Selektion und Projektion

Da jede Operation wieder eine Relation liefert, können Operationen problemlos verschachtelt werden. Um nur die -Werte aller Tupel mit zu erhalten:

Die Auswertung erfolgt von innen nach außen: zuerst wird selektiert (Zeilen filtern), dann projiziert (Spalten auswählen).

R
ABC
1a2
2a2
3c1
1b4
πBA=1(R))
B
a
b

4. Umbenennung (ρ)

Das griechische Rho () steht für „rename". Notation: oder

Die Umbenennung gibt einer Relation oder einzelnen Attributen einen neuen Namen. Das ist besonders wichtig, wenn zwei Relationen mit gleichen Attributnamen verknüpft werden sollen.

Beispiel: Die Relation soll unter dem neuen Namen geführt werden und ihre Attribute in umbenennen:

Die Menge der Tupel bleibt identisch, nur das Schema ändert sich.
R
ABC
1a2
2a2
3c1
1b4
S
XYZ
1a2
2a2
3c1
1b4

5. Vereinigung (∪)

Notation:

Die Vereinigung fügt die Tupel zweier Relationen zusammen. Doppelte Tupel werden automatisch entfernt. Beide Relationen müssen vereinigungskompatibel sein, d. h. sie müssen die gleiche Anzahl an Attributen mit kompatiblen Datentypen haben.

Vereinigungskompatibel: gleiche Attributanzahl und Domänen, Attributnamen dürfen abweichen.
R
AB
12
13
S
CD
12
23
R ∪ S
AB
12
13
23

Das Tupel kommt in beiden Relationen vor und erscheint im Ergebnis deshalb nur einmal.

6. Differenz (−)

Notation:

Die Differenz liefert alle Tupel, die in , aber nicht in enthalten sind. Auch hier gilt die Voraussetzung der Vereinigungskompatibilität.

R
AB
12
13
S
CD
12
23
R − S
AB
13

7. Schnittmenge (∩)

Notation:

Die Gültigkeit von lässt sich einfach mit einem Mengendiagramm (Venn-Diagramm) zeigen. Die Schnittmenge liefert alle Tupel, die sowohl in als auch in enthalten sind. Die Schnittmenge ist kein eigenständiger Grundoperator, sondern lässt sich durch Differenz ausdrücken: . Sie wird dennoch häufig als abgeleiteter Operator verwendet, da sie ausdrucksstärker ist.

R
AB
12
13
S
CD
12
23
R ∩ S
AB
12

8. Kreuzprodukt (×)

Notation:

Das Kreuzprodukt (kartesisches Produkt) kombiniert jede Zeile von mit jeder Zeile von . Wenn Tupel und Tupel hat, enthält das Ergebnis Tupel. Das Ergebnis-Schema enthält alle Attribute beider Relationen.

Das Kreuzprodukt allein ist selten sinnvoll, weil es auch inhaltlich zusammenhanglose Kombinationen erzeugt. Es dient vielmehr als Grundbaustein für den Verbund (Join).
R
AB
12
13
S
CD
12
23
R × S
ABCD
1212
1223
1312
1323

9. Verbund / Join (⋈)

Theta-Join

Notation:

Der Verbund (englisch: Join) ist die wichtigste Operation zum Verknüpfen von Relationen. Ein Theta-Join ist im Wesentlichen ein Kreuzprodukt, auf das anschließend eine Selektion angewendet wird:

Die Bedingung kann ein beliebiger Vergleichsausdruck (, , , , , ) sein.

Mit der Punktnotation (R.A,S.A) können gleich benannte Attribute verschiedener Relationen angesprochen werden. Nur Tupel, für die in dem Wert in entspricht:

R
AB
1x
2y
3z
S
AB
2100
3200
4300
R ⋈R.A=S.A S
R.AR.BS.AS.B
2y2100
3z3200

Natural Join (natürlicher Verbund)

Der Natural Join ( ohne Bedingung) verbindet automatisch über alle Attribute, die in beiden Relationen gleich benannt sind, und liefert dabei keine doppelten Spalten. Er ist besonders kompakt zu schreiben.

Verknüpft wird über das gleichnamige Attribut :

X
AB
1a
2a
3c
Y
AC
13
22
12
X ⋈ Y
ABC
1a3
1a2
2a2

Mehrere gleichnamige Attribute ( und ) werden ebenfalls berücksichtigt. Nur Tupel, bei denen beide Werte übereinstimmen, landen im Ergebnis:

U
ABC
1a2
2a2
3c1
V
ACD
13a
22b
12c
U ⋈ V
ABCD
1a2c
2a2b

Zusammenfassung der Operatoren

¹ AS ist kein eigenständiger Operator, sondern Syntax innerhalb von SELECT oder FROM.
OperatorSymbolZweckSQL
SelektionZeilen filternWHERE
ProjektionSpalten auswählenSELECT
UmbenennungAttribute/Relation umbenennenAS ¹
VereinigungZeilen zusammenführenUNION
DifferenzZeilen subtrahierenEXCEPT
SchnittmengeGemeinsame ZeilenINTERSECT
KreuzproduktAlle KombinationenCROSS JOIN
VerbundVerknüpfung nach BedingungJOIN
Training: Operatoren anwenden

Gegeben seien drei Relationen , und :

P
AB
ac
bc
cf
Q
BC
cf
eg
cg
T
C
f
g

Berechne die folgenden Ausdrücke von Hand. Gib jeweils das vollständige Ergebnis als Relation an.

(a) (f)
(b) (g)
(c) (h)
(d) (i)
(e) (j)
(Beschreibe die Operation in Worten.)

Übungsaufgaben mit Schulschema

Die Übungsaufgaben in diesem Dokument beziehen sich auf das folgende Schema einer Schulverwaltung:

Primärschlüssel sind unterstrichen (SID) und Fremdschlüssel mit ↑ markiert (↑FID).
  • Schueler (SID, Name, Klasse)
  • Fach (FID, Bezeichnung, Lehrkraft)
  • Kurs (↑SID, ↑FID, Note)
Schueler
SIDNameKlasse
1Amir12
2Lena12
3Jonas12
4Mia11
5Tobias11
Fach
FIDBezeichnungLehrkraft
10InfFr. Novak
20MaHr. Wagner
30EngFr. Petersen
Kurs
SIDFIDNote
1102
1201
2103
2302
3101
3202
4204
5303
Training: Selektion und Projektion

Aufgabe 1 — Selektion und Projektion

  1. Formuliere einen Ausdruck der relationalen Algebra, der alle Kurse mit der Note 1 liefert.
  2. Formuliere einen Ausdruck, der nur die Namen aller Schülerinnen und Schüler ausgibt, ohne weitere Attribute.
  3. Welche Schülerinnen und Schüler befinden sich in der Klasse 11? Gib nur ihre Namen und SIDs aus.
Training: Verbund (Join)

Aufgabe 2 — Verbund (Join)

  1. Formuliere einen Ausdruck, der die Namen aller Schülerinnen und Schüler und die von ihnen erhaltenen Noten ausgibt.
  2. Erweitere den Ausdruck aus (1) so, dass auch die Bezeichnung des zugehörigen Faches mit ausgegeben wird.
  3. Welche Schülerinnen und Schüler (Name) werden von Fr. Novak unterrichtet?
Training: Mengenoperationen

Aufgabe 3 — Mengenoperationen (Ohne Verwendung von Join.)

  1. Formuliere einen Ausdruck, der die SIDs aller Schüler liefert, die Informatik (FID=10) oder Englisch (FID=30) belegen (oder beides).
  2. Welche Schüler (SID) belegen sowohl Informatik als auch Mathematik?
  3. Welche Schüler (SID) belegen Informatik, aber nicht Mathematik?
Training: Komplexe Anfragen

Aufgabe 4 — Komplexe Anfragen

  1. Gib die Namen aller Schülerinnen und Schüler aus der Klasse 12 aus, die in irgendeinem Fach die Note 1 erhalten haben.
  2. Gib für jeden Schüler, der Informatik belegt, dessen Namen und die zugehörige Note aus.
  3. Welche Lehrkräfte unterrichten Schülerinnen und Schüler aus der Klasse 12? Gib nur die Namen der Lehrkräfte aus.

Aufgabe 5

Gegeben sei folgende Erweiterung des Schemas:

  • Raum (RID, Bezeichnung, Gebaeude)
  • Unterricht (↑FID, ↑RID, Wochentag, Stunde)
  1. In welchen Räumen findet Informatikunterricht statt? Gib die Raumbezeichnungen aus.
  2. Formuliere einen Ausdruck, der alle Fächer ausgibt (Bezeichnung), die in Gebäude „B" unterrichtet werden.
  3. Welche Schülerinnen und Schüler (Name) belegen ein Fach, das montags () stattfindet?