Mal ein Beispiel für die relationale Division:
Relationen (
PrimaryKey,
ForeignKey):
Bild B (
BNR, B_Titel)
Ausstellung A (
ANR, A_Titel,
BNR)
Aufgabe: "Gesucht sind die Titel der Ausstellungen, die alle Bilder ausstellen."
Das ist nichts anderes als R = (ANR, BNR) A / (BNR) B
In Relationskalkülform: R = { ( x.A_Titel ) : x / A ^ ( Allquantor y / B )( Existenzquantor z / A )( y.BNR = z.BNR ^ z.ANR = x.ANR ) }
Dann formen wir den Allquantor noch um: R = { ( x.A_Titel ) : x / A ^ ( --Existenzquantor y / B )(-- Existenzquantor z / A )( y.BNR = z.BNR ^ z.ANR = x.ANR ) }
Das schöne am Kalkülausdruck ist die leichte Übersetzung in SQL:
|
SQL Code
|
1
2
3
4
5
6
7
8
9
10
|
SELECT A_TITEL
FROM A x
WHERE NOT EXISTS(
SELECT *
FROM B y
WHERE NOT EXISTS(
SELECT *
FROM A z
WHERE y.BNR = z.BNR
AND z.ANR = x.ANR))
|