Databases Reference
In-Depth Information
Mit dem in Abschnitt 2.6.2 eingeführten Distinct-Operator erhalten wir die rela-
tionale Projektion ProR durch:
ProR […](R) = Distinct(ProT[…](R))
Aus diesem Grund gibt es in SQL ein Schlüsselwort DISTINCT , das angibt, dass eine
durchzuführende Projektion eine Relation als Ergebnis haben soll. Ohne Angabe
von DISTINCT wird die entsprechende Projektion der Tabellenalgebra ausgeführt.
Bei der Bildung der Vereinigungsmenge von zwei Relationen können Tupel dop-
pelt gezählt werden, so dass hier die relationale Vereinigung von der tabellarischen
Vereinigung abweicht.
Für die relationale und tabellarische Variante der Vereinigung gilt:
T1 T2 = Distinct (T1 + T2)
Anders als bei der Projektion ist beim UNION-Operator von SQL allerdings die
relationale Variante der Standardfall. Um die tabellarische Operation zu erhalten,
ist hier UNION ALL anzugeben.
Für alle anderen Operationen sind die relationalen Operatoren Spezialfälle der Tabel-
lenoperatoren. Wenn also die Operanden Tabellen sind, die keine mehrfach auftre-
tenden Tupel haben, haben auch die Ergebnisse keine mehrfach auftretenden Tupel.
Hiermit können wir jetzt auch den vermeintlichen Widerspruch aufklären, wieso
Datenbanksysteme, die nach dem tabellarischen Datenmodell (z.B. Access, SQL-
Datenbanksysteme) arbeiten, dennoch als relational bezeichnet werden: Wir kön-
nen in diesen Datenbanksystemen rein relational arbeiten, wenn wir uns an fol-
gende Richtlinien halten:
Jede Basisrelation muss einen Primärschlüssel haben.
Bei Projektionen ist sicherzustellen, dass die relationale Projektion benutzt wird
(in SQL durch SELECT DISTINCT ).
Beim UNION-Operator ist die relationale Variante zu wählen (in SQL UNION
ohne das Schlüsselwort ALL ).
2.6.12 Übungsaufgaben
Aufgabe 2.5
Welche der folgenden Abfragen ergeben Relationen? Vorausgesetzt ist, dass die
Ausgangstabellen jeweils Relationen sind, aber jeweils die für Tabellen definierten
Operatoren benutzt werden. Es sind hierbei die jeweiligen Schlüssel- und Fremd-
schlüsseleigenschaften der Relationen entsprechend Anhang C zu beachten.
a) ProjT[kunden_nr, name, straße, plz, ort] (kunde)
b) ProjT[plz, ort] (kunde)
c)
kunde join[kunden_nr] bestellung
 
Search WWH ::




Custom Search