1 Einführung
2 Funktionsumfang von RelaX
2.1 Anfragesprache
-
Selektionen (\(\sigma\)), Projektionen (\(\pi\)) und Umbenennungen (\(\rho\))
-
alle Varianten von Joins, inklusive Kreuzprodukte, Inner Joins, Outer Joins, Semijoins und Antijoins, wobei hier alle Varianten auch als Natural Joins unterstützt werden
-
Vereinigung (\(\cup\)), Schnittmenge (\(\cap\)) und Subtraktion (\(-\))
-
Division (\(\div\))
-
Gruppierung (\(\gamma\))
π Name (
σ Titel = 'Logik' (
ρ p Professoren
⋈ p.PersNr = v.gelesenVon
ρ v Vorlesungen
))
pi Name (
sigma Titel = 'Logik' (
rho p Professoren
inner join p.PersNr = v.gelesenVon
rho v Vorlesungen
))
/*
und */
) anzugeben. Die folgende Anfrage zeigt die Verwendung von Variablen und Kommentaren:
/* Ermittle, welche Studenten an welchen
Vorlesungen teilgenommen haben. */
VorlesungenStudenten =
Studenten ⋈
hoeren ⋈
Vorlesungen
/* Finde die Professoren, die diese
Vorlesungen gehalten haben. */
Professoren
⋈ Professoren.PersNr =
Vorlesungen.gelesenVon
VorlesungenStudenten
2.2 Ausführung von Anfragen
-
Der Operatorbaum wird nicht umsortiert, um die Ausführung zu beschleunigen, sondern genau so ausgeführt, wie der Benutzer die Anfrage eingibt und “von Hand” berechnen würde.
-
Alle Operationen wurden reihenfolgeerhaltend implementiert. Das bedeutet, dass die Ordnung der Tupel des Ergebnisses einer Operation der Ordnung in den Ausgangsrelationen entspricht. Die Ordnung wird also bei einer Projektion und Selektion beibehalten. Bei Joins entspricht die Ordnung der eines Nested-Loop-Joins und auch bei einer Gruppierung mit Aggregation wird sichergestellt, dass die resultierenden Tupel an einer nachvollziehbaren Position stehen.