hwr-notes/Datenbanken/Zusammenfassungen/c_Algebra - zusammenfassung.md
2026-04-09 11:24:56 +02:00

6 KiB
Raw Blame History

Relationale Algebra Zusammenfassung

Dozent: A. Zimmermann | HWR Berlin | 2026 | Folien 116


1. Definitionen (Folien 13)

Formale Sprachen für Relationen

Es gibt zwei formale Sprachen für die Behandlung von Relationen:

Sprache Beschreibung
Relationale Algebra Definiert Operationen über Relationen; Ergebnis ist wieder eine Relation (Geschlossenheit). Definiert was man will, nicht wie
Relationenkalkül Deklarative Beschreibung gewünschter Ergebnisse

Die relationale Algebra bildet die Basis für SQL (Structured Query Language).

Beispiele Relationenkalkül:

{ k | k ∈ KUNDEN ∧ k.STATUS = "Aktiv" }
{ [a.NAME, f.TITEL] | a∈ACTOR ∧ f∈FILM ∧ a.ID=f.A_ID }

Grundoperatoren (vollständiger Satz)

Operator Notation Beschreibung
Selektion σ_Prädikat(Relation) Zeilen filtern nach Bedingung
Projektion π_Attribute(Relation) Spalten auswählen
Kartesisches Produkt R1 × R2 Alle Kombinationen von Zeilen
Umbenennung ρ_Alias(Relation) Relation oder Attribute umbenennen
Vereinigung R1 R2 Tupel aus beiden Relationen zusammenfassen
Differenz R1 — R2 Tupel aus R1, die nicht in R2 vorkommen

Wichtig: Dieser Satz ist vollständig — alle anderen Operatoren lassen sich durch diese ausdrücken.


2. Operatoren im Detail (Folien 415)

2.1 Selektion σ (Folie 4)

Filtert Zeilen einer Relation anhand eines Prädikats. Das Prädikat wird für jede Zeile geprüft.

Beispiele:

σ_{Semester > 10}(Studenten)
→ Ergebnis: MatrNr 24002 (Xenokrates, 18), MatrNr 25403 (Jonas, 12)

σ_{Name = 'Sokrates'}(Professoren)
→ Ergebnis: PersNr 2125, Sokrates, C4, Raum 226

2.2 Projektion π (Folie 5)

Wählt bestimmte Spalten aus einer Relation aus.

π_{MatrNr, Name}(Studenten)
→ Ergebnis: Nur MatrNr und Name aller Studenten

π_{Rang}(Professoren)
→ Ergebnis: C3, C4 (Duplikate werden in relationaler Algebra eliminiert!)

Wichtig: In relationaler Algebra gibt es keine Duplikate, in SQL schon (deshalb DISTINCT).

2.3 Zusammenhang Algebra ↔ SQL (Folien 67)

Relationale Algebra SQL
π (Projektion) SELECT
σ (Selektion) WHERE

Beispiele:

Anfrage Algebra SQL
Wie heißen die Professoren? π_{Name}(Professoren) SELECT Name FROM Professoren;
Name des Studenten mit MatrNr 25403? π_{Name}(σ_{MatrNr=25403}(Studenten)) SELECT Name FROM Studenten WHERE MatrNr = 25403
Studenten mit >6 Semestern? π_{Name,MatrNr}(σ_{Semester>6}(Studenten)) SELECT Name, MatrNr FROM Studenten WHERE Semester > 6

Reihenfolge der Operatoren (Folie 7)

Grundsätzlich dürfen relationale Operatoren in zusammengesetzten Ausdrücken nicht vertauscht werden!

π_{Name,MatrNr}(σ_{Semester>6}(Studenten))     ← korrekt
σ_{Semester>6}(π_{Name,MatrNr}(Studenten))     ← FALSCH (Semester ist nach Projektion weg!)

2.4 Umbenennung ρ (Folie 8)

Notwendig wenn:

  • Relationen gleich benannte Attribute besitzen, die beide in der Abfrage benötigt werden
  • Eine Relation mehrfach in einer Abfrage vorkommt (rekursive Beziehungen)

Umbenennung ist immer temporär (operatorbezogen).

ρ_{Relation-Alias}(Relation)           ← Relation umbenennen
ρ_{Attribut-Alias ← Attribut}(Relation) ← Attribut umbenennen

2.5 Vereinigung (Folien 910)

Voraussetzungen (Vereinigungskompatibilität):

  • Gleiche Anzahl von Attributen
  • Attribute gleich benannt
  • Gleichnamige Attribute haben denselben Datentyp

Zum Erfüllen der Kriterien können Projektion und Umbenennung verwendet werden.

Ergebnis: Selbes Schema wie die Operanden, Tupel zusammengefasst, Duplikate eliminiert.

SELECT Name FROM Studenten UNION
SELECT Name FROM Assistenten UNION
SELECT Name FROM Professoren;

Beispiel:

R = { [1, abc, 1.5], [2, def, 2.3] }
S = { [7, xyz, 4.4], [8, uvw, 6.7] }
R  S = { [1, abc, 1.5], [2, def, 2.3], [7, xyz, 4.4], [8, uvw, 6.7] }

2.6 Differenz — (Folien 1113)

Gleiche Voraussetzungen wie bei Vereinigung.

Ergebnis: Selbes Schema, enthält Tupel aus R1, die in R2 nicht vorkommen.

R = { [1, abc, 1.5], [2, def, 2.3] }
S = { [2, def, 2.3], [7, xyz, 4.4] }
R — S = { [1, abc, 1.5] }

SQL-Umsetzung:

-- Variante 1: NOT IN
SELECT Name FROM Studenten WHERE MatrNr NOT IN
  (SELECT DISTINCT MatrNr FROM hoeren);

-- Variante 2: MINUS
SELECT MatrNr FROM Studenten
MINUS
SELECT DISTINCT MatrNr FROM hoeren;

2.7 Schnittmenge ∩ (Folie 14)

Die Schnittmenge ist kein Grundoperator, kann aber abgeleitet werden:

A ∩ B = A — (A — B) = B — (B — A)

SQL-Umsetzung:

-- Variante 1: INTERSECT
SELECT gelesenVon AS PersNr FROM Vorlesungen
INTERSECT
SELECT PersNr FROM Professoren WHERE Rang = 'C4';

-- Variante 2: IN (falls INTERSECT nicht verfügbar)
SELECT gelesenVon AS PersNr FROM Vorlesungen
WHERE PersNr IN
  (SELECT PersNr FROM Professoren WHERE Rang = 'C4');

2.8 Kartesisches Produkt × und Join (Folie 15)

Komplexe Abfragen nutzen das kartesische Produkt mit anschließender Selektion (Equi-Join):

Anfrage: "Welche Studenten hören welche Vorlesungen?"

π_{s.Name, v.Titel}(σ_{h.VorlNr=v.VorlNr ∧ s.MatrNr=h.MatrNr}(
    Studenten s × Vorlesungen v × hoeren h))

Oder ausführlich mit expliziter Umbenennung:

π_{s.Name, v.Titel}(σ_{v.VorlNr=h.VorlNr ∧ h.MatrNr=s.MatrNr}(
    ρ_s(Studenten) × ρ_v(Vorlesungen) × ρ_h(hoeren)))

Zusammenfassung

Operator Symbol SQL-Entsprechung Grundoperator?
Selektion σ WHERE Ja
Projektion π SELECT Ja
Kartesisches Produkt × FROM (Cross Join) Ja
Umbenennung ρ AS Ja
Vereinigung UNION Ja
Differenz MINUS / NOT IN Ja
Schnittmenge INTERSECT / IN Nein (ableitbar)
Join JOIN ... ON Nein (σ + ×)