Bauelemente relationaler Sprachen:

Tupeln joinen in neuer Partnerbeziehung

18.06.1982

Der folgende Artikel wendet sich an jene Anwender, die relationale Sprachen insbesondere SQL einführen. Der Autor hat sich in einem neuen Fachbuch der CW-Edition ("Relationale Datenbanken") unter anderem die Aufgabe gestellt. Bauelemente dieser Sprachen, wie den Begriff der Relation und die grundlegenden relationalen Operationen, vorzustellen und zu zeigen. wie man aus ihnen komplexere Fragestellungen konstruiert.

Eine Relation ist eine Tabelle, in der sich die einzelnen Zeilen voneinander unterscheiden. Die Mathematiker nennen die Zeilen der Tabelle "Tupel" und ihre Spalten "Domänen". Im Beispiel werden drei Relationen verwendet:

- eine Auftragsrelation, die aus den Domänen Auftragsnummer ANR, Auftragsmenge ATME und Termin TERM besteht,

- eine Arbeitsplatzrelation, die aus den Domänen Arbeitsplatz APZ, Kostenstelle KST und Kapazität KPZ besteht und

- eine Arbeitsfolgerelation, die aus den Domänen Auftragsnummer ANR, Arbeitsfolge AFO, Arbeitsplatz APZ und Vorgabezeit VZ besteht.

Obwohl die meisten telationalen Sprachen auch über nichtrelationale Kommandos wie arithmetische Rechenoperationen, Maximum- und Minimumbildung oder Sortieren verfügen, wird die Struktur der Sprache doch durch ihre relationalen Kommandos bestimmt, die sich aus folgenden Bausteinen zusammensetzen:

Die Kommandos heißen "relational", weil sie Relationen als Eingabe haben und als Ausgabe wieder Relationen erzeugen. Wir wollen nun jeden dieser Bausteine in der Folge an Hand von Beispielen aus der Fertigungsindustrie erläutern:

Vereinigt man zwei Relationen A und B, dann ist das Ergebnis eine Relation C, die alle voneinander verschiedenen Tupel von A und B enthält.

Operation: Auftrage hinzufügen

SELECT * FROM A UNION SELECT * FROM B

Die Differenz von Relationen

Subtrahiert man von einer Relation C eine Relation B, dann ist das Ergebnis eine Relation, die alle Tupel von C enthält, die nicht in B vorkommen.

Operation: Arbeitsplätze löschen

DELETE FROM C - WHERE CAPZ IN (SELECT BAPZ FORM B)

Die Selektion

Die Selektion erzeugt aus einer Relation A eine neue Relation B, indem sie aus allen Tupeln von A jene auswählt, für die eine Auswahlbedingung zutrifft. Das folgende Beispiel zeigt, wie die Fertigungssteuerung mit Hilfe einer Selektion alle Aufträge ermittelt, die im März im Verzug sind. (Auswahlbedingung = TERM < 'MAERZ')

Operation: Ermittelte Aufträge mit Verzug

SELECT * FROM A WHERE TERM <'MAERZ'

Die Projektion

Die Projektion wählt aus einer Relation A eine oder mehrere Domänen aus und übernimmt diejenigen Tupel der Auswahl, die sich voneinander unterscheiden, in die Ergebnisrelation B. Mit der folgenden Projektion ermittelt die Fertigungssteuerung, welche Aufträge die einzelnen Arbeitsplätze belasten:

Operation: Arbeitsplatzbelastung ermitteln

SELECT ANR, APZ, FROM A

Der Join

Der Join erzeugt aus zwei Relationen A und B eine dritte Relation C, indem er diejenigen Tupel von A und B miteinander verkettet, zwischen denen eine Partnerbeziehung besteht. Eine solche Beziehung besteht dann, wenn die Werte in ausgewählten Domänen von A mit denen ihrer Partnerdomänen von B übereinstimmen. Die Relation C enthält alle Domänen von A und B, von den Partnerdomänen aber nur jeweils einen Partner. Mit dem folgenden Join belegt die Fertigungssteuerung die Arbeitsplätze mit den zugehörigen Arbeitsfolgen:

Operation: Arbeitsplätze belegen

SELECT AAPZ, KST, KAP, ANR, AFO, VZ FROM A, B - WHERE AAPZ = APZ

(zwischen den mit * markierten Domänen besteht eine Partnerbeziehung)

Die Synthese von komplexen Fragestellungen

Die fünf Grundoperationen s ' die Bausteine, mit deren Hilfe ein nutzer komplexere Fragestellungen konstruieren kann. In der folgenden Abfrage sind zwei Selektionen ineinandergeschachtelt. Mit ihr ermittelt die Fertigungssteuerung, welche Aufträge im selben Monat abgeschlossen werden sollen wie der Auftrag A4.

Operation: Aufträge ermitteln

SELECT ANR, ATME, TERM FROM A - WHERE TERM IN (SELECT TERM FROM A - WHERE ANR = 'A4')