Gegeben sei die folgende relationale “Geschäftsdatenbank” einer Kaufhauskette. Es kann davon ausgegangen werden, dass eine Abteilung nur von einem Angestellten geleitet wird, welcher selbst in dieser Abteilung tätig ist:

  • Angestellter (Nummer, Name, Gehalt, Abteilung, Geburtsjahr, Einstellungsdatum)
  • Abteilung (Nummer, Name, Filiale, Stock, Leiter[Angestellter])
  • Filiale (Nummer, Stadt, Land)
  • Lieferant (Nummer, Name, Stadt, Land)
  • Artikel (Nummer, Name, Abteilung, Preis, Bestand, Lieferant)
  • Verkauf (Nummer, Datum, Abteilung, Artikel, Anzahl, Angestellter, Betrag)

Für die Attribute gelten dabei folgende Wertebereiche:

  • Nummer: Integer
  • Gehalt: Decimal(10,2)
  • Geburtsjahr: Integer
  • Einstellungsdatum: Date
  • Name: String
  • Stock: Integer
  • Stadt: String
  • Land: String
  • Preis: Decimal
  • Bestand: Integer
  • Datum: Date
  • Anzahl: Integer
  • Betrag: Decimal

Hinweis: Im obigen Schema werden Fremdschlüssel durch eine Linie über dem entsprechenden Attribute gekennzeichnet. Falls der Name der referenzierten Relation nicht dem Namen des Fremdschlüssels entspricht, wird der Name der Relation in eckigen Klammern hinter dem Fremdschlüssel angegeben.

Aufgabe 6-1: Anfragen im Tupel- und Bereichskalkül

Syntaxerweiterung für den Tupel- und Bereichskalkül:

  • Tupelkalkül: Hier können neue Tuple durch den Tupelkonstruktor [] aus den Komponenten anderer Tupelvariablen gebildet werden. Die Namen der Attribute im Schema des neuen Tupels ergeben sich aus den Attributnamen der genutzten Komponenten. Ein Beispiel hierfür ist der Ausdruck, der die Namen aller Angestellten zurückgibt:
    • Schema(t) = Schema(Angestellter); {[t.Name] | t ∈ Angestellter}
  • Bereichskalkül: Der Unterstrich _ dient also Platzhalter für nicht benötigte Attribute einer Relation, was die Formulierung von Anfragen vereinfacht. Beispielsweise kann für die Auswahl aller Städte aus der Relation Filiale, in denen sich eine Filiale befindet, folgender Ausdruck verwendet werden:
    • {la | ∃nr, st: Filiale(nr, st, la)} = {la | Filiale(_, _, la)}

Aufgabenstellung: Formulieren Sie Anfragen jeweils im Tupel- und Bereichskalkül. Bei Anfragen, die den Tupelkalkül verwenden, geben Sie zusätzlich das Schema aller freien Variable an.

Needed Know-How

a) Bestimmen Sie die Namen aller Angestellten mit einem Gehalt von weniger also 2000.

TK:

BK:

b) Erstellen Sie eine Liste aller Verkaufsnummern mit Verkaufsdatum, die in den Abteilungen im 3. Stock verkauft wurden und deren Lieferant entweder aus Italien oder aus Frankreich kommt.

TK:

BK:

c) Bestimmen Sie für alle Filialen in der Stadt Köln, die Nummern und Namen aller Angestellten sowie die Abteilungsnamen in denen diese Angestellten arbeiten.

TK:

d) Bestimmen Sie die Nummern, Namen, Gehalt und Geburtsjahr aller Angestellten, die am 01.10.2023 etwas verkauft haben und keine Leiter einer Abteilung sind.

e) Bestimmen Sie die Nummern und Namen der Lieferanten, welche die Kaufhauskette mit mindestens drei unterschiedlichen Artikeln beliefern.

Aufgabe 6-2 Tupel- und Bereichskalkül

Zeigen Sie, wie man die folgenden Operationen der relationale Algebra sowohl im Tupel- also auch im Bereichskalkül darstellen kann. Für Anfragen im Tupelkalkül soll dar über hinaus das Schema aller freien Variable angegeben werden.

Lösungen müssen noch eingetragen werden, leider keine Zeit für gehabt

a) σA=x(R(A, B, C))

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

b) ΠA,B(R(A, B, C))

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

c) R(A, B, C) ▷◁ S(C, D, E)

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

d) R(A, B, C) ∪ S(A, B, C)

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

e) R(A, B, C) ∩ S(A, B, C)

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

f) R(A, B, C) − S(A, B, C)

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

g) R(A, B, C) × S(D, E, F)

Lösung im Tupelkalkül:

Lösung im Bereichskalkül:

Als nächstes: DBS-Blatt 7