Zur Darstellung eines komplexeren Beispiels zur Relationenalgebra gehen wir von folgenden Tabellen einer Oberstufenverwaltung aus:

Schüler

SNr Name Vorname Tutor Geschlecht
123AlbertiHansMüllerm
034GlücklichGesineAbelw
321MüserAngelikaAbelw
111WeberWolfgangZangem

Kurs

KNr Typ Fach Thema Jahrgangsstufe
13GKMathematikAnalysis 212/I
11GKPhysikMechanik 111/I
03GKInformatikDatenbanken12/II
25LKEnglischShort Stories12/I
89GKInformatikCompilerbau13/II

besucht

SNr KNr Fehlstunden Punkte
123030012
123250307
321890014
111032103

Die Tabellen stellen also zwei Objekttypen und einen Beziehungstyp dar. In Relationenschreibweise liegt folgende Darstellung vor:

Schüler ( SNr, Name, Vorname, Tutor, Geschlecht )
Kurs ( KNr, Typ, Fach, Thema, Jahrgangsstufe )
besucht ( ↑SNr, ↑KNr, Fehlstunden, Punkte )

Welche Mädchen haben Informatikkurse besucht und welche Punktzahl haben sie dabei erreicht?

In diesem Beispiel werden wir die Lösung schrittweise erarbeiten.

Bestimmung (der Kursnummern) der Informatikkurse

Informatikkurse = \pi_{KNr} ( \sigma_{Fach = Informatik} (Kurs))

Informatikkurse

KNr
03
89

Der Join mit der besucht-Tabelle über das gemeinsame Schlüsselattribut KNr liefert die Informatikschüler.

Informatikschüler = Informatikkurse  \bowtie besucht

Informatikschüler

KNrSNrFehlstundenPunkte
031230012
031112103
893210014

Projektion auf die benötigten Attribute SNr und Punkte.

InformatikschülerPunkte = \pi_{SNr, Punkte} (Informatikschüler)

InformatikschülerPunkte

SNrPunkte
12312
11103
32114

Join mit Schüler-Tabelle über das gemeinsame Schlüsselattribut SNr

InformatikschülerPunkteName = InformatikschülerPunkte \bowtie Schüler

InformatikschülerPunkteName

SNrPunkteNameVornameTutorGeschlecht
12312AlbertiHansMüllerm
11103WeberWolfgangZangem
32114MüserAngelikaAbelw

Selektion der Mädchen und Projektion auf die geforderten Angaben.

Ergebnis = \pi_{Punkte, Name, Vorname} (\sigma_{Geschlecht=w} (InformatikschülerPunkteName))

Ergebnis

PunkteNameVorname
14MüserAngelika

So ausführlich werden wir zukünftig die Terme der relationalen Algebra nicht herleiten – es genügt der Term. Die obigen Einzelschritte lassen sich zu einem Term sehr spezialisierten Term zusammenfassen:

\pi_{Punkte, Name, Vorname} (\sigma_{Geschlecht=w} ( \pi_{SNr, Punkte} ( \pi_{KNr} ( \sigma_{Fach = Informatik} (Kurs)) \bowtie besucht ) \bowtie Schüler))

Diese extreme Einschränkung ist in der Regel nicht notwendig, wir sollten jedoch darauf achten, die entstehenden Tabellen nicht unnötig groß werden zu lassen. Ein (nicht zu verwendendes) Gegenbeispiel wäre der Term:

\pi_{Punkte, Name, Vorname} (\sigma_{Geschlecht=w \land Fach=Informatik} ( Kurs \bowtie besucht \bowtie Schüler))

In diesem Beispiel würde der Join (der ja zuerst ein Kreuzprodukt bildet) über drei Tabellen unnötig groß werden – dies führt zu einem größeren Speicherbedarf und damit auch zu einer schlechteren Laufzeit bei der späteren Verarbeitung.