Grundlagen von Datenbanken SS 2010 5. Bereichskalkül (=Domänenkalkül) Prof. Dr. Stefan Böttcher Universität Paderborn
Agenda: Interpretation
mit Material von Prof. Dr. Gregor Engels Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 1
Vollständigkeit
Relation als Interpretation ihres Schemas Wenn A1,…,An Attribute von R und D1, …, Dn die Wertebereiche von A1,…,An, dann beschreibt schema(R) = D1 x … x Dn die Menge der möglichen Werte-Kombinationen für Tupel aus R Einige Werte-Kombinationen gelten als wahr (genau die werden in R gespeichert), alle anderen gelten als falsch (und werden nicht in R gespeichert). Formal: Zu schema(R) gibt es eine Interpretation I, also eine Funktion I : schema(R) --> { true, false } und R = { t schema(R) | I(t)=true } Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 2
Vollständigkeit
Interpretation am Beispiel R
bestNr
datum teil
kunde
21
21.6.04
13
Reich
22
22.6.04
13
Reich
3 verschiedene Schreibweisen für dasselbe
I : schema(R) --> { true, false } I ( 21 , 21.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Meier ) = false … = false t R u R t.bestNr=21 t.datum=21.6.04 t.teil=13 t.kunde=Reich u.bestNr=22 u.datum=22.6.04 u.teil=13 u.kunde=Reich
alles andere (in R nicht gespeicherte und nicht aus R ableitbare) gilt als falsch (=Closed World Assumption) Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 3
Vollständigkeit
Interpretation am Beispiel R
P(teil,kunde) ( R )
datum teil
kunde
teil
kunde
21
21.6.04
13
Reich
13
Reich
22
22.6.04
13
Reich
13
Reich
bestNr
I : schema(R) --> { true, false } I ( 21 , 21.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Meier ) = false … = false
?
t R u R t.bestNr=21 t.datum=21.6.04 t.teil=13 t.kunde=Reich u.bestNr=22 u.datum=22.6.04 u.teil=13 u.kunde=Reich Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 4
Vollständigkeit
Interpretation am Beispiel P(teil,kunde) ( R )
R datum teil
kunde
teil
kunde
21
21.6.04
13
Reich
13
Reich
22
22.6.04
13
Reich
13
Reich
bestNr
I : schema(R) --> { true, false } I ( 21 , 21.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Meier ) = false …
I : int x char(20) --> { true, false } I ( 13 , Reich ) = true I ( 13 , Reich ) = true I ( 13 , Meier ) = false …
t R u R t.bestNr=21 t.datum=21.6.04 t.teil=13 t.kunde=Reich u.bestNr=22 u.datum=22.6.04 u.teil=13 u.kunde=Reich Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
?
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 5
Vollständigkeit
Interpretation am Beispiel P(teil,kunde)R
R datum teil
kunde
teil
kunde
21
21.6.04
13
Reich
13
Reich
22
22.6.04
13
Reich
13
Reich
bestNr
I : schema(R) --> { true, false } I ( 21 , 21.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Reich ) = true I ( 22 , 22.6.04 , 13 , Meier ) = false …
I : int x char(20) --> { true, false } I ( 13 , Reich ) = true I ( 13 , Reich ) = true I ( 13 , Meier ) = false … t P(teil,kunde)R
t R u R t.bestNr=21 t.datum=21.6.04 t.teil=13 t.kunde=Reich u.bestNr=22 u.datum=22.6.04 u.teil=13 u.kunde=Reich
u P(teil,kunde)R t.teil=13 t.kunde=Reich u.teil=13 u.kunde=Reich
Anfrage-Auswertung als Beweis, d.h. Anfrageergebnisse entsprechen abgeleiteten Prädikaten Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 6
Vollständigkeit
Anfrage-Kalkül ist formale logische Sprache dient zur Formulierung von Aussagen bzw. Anfragen
Ziel: deklarative Formulierung von Datenbank-Anfragen in Form von Aussagen über den gewünschten Daten Beispiele: Prolog-Derivat Datalog; aber auch SQL Logikbasierter Ansatz: Tabellen entsprechen Interpretationen von Prädikaten Anfrageergebnisse entsprechen abgeleiteten Prädikaten Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 7
Vollständigkeit
Ein allgemeiner Anfrage-Kalkül Motivation: mathematische Notation: {x2 | x
IN
x3 > 0
x3 < 1000}
Eine Anfrage hat die Form { f (x) | p(x) } wobei • x bezeichnet Tupel von freien Variablen
x = (x1 : D1, . . . , xn : Dn) • f bezeichnet Ergebnisfunktion über x Wichtige Spezialfälle: • Angabe einer Variable selber (f ist hier die Identitätsfunktion) • Tupelkonstruktion (Ergebnis vom Typ tuple of) Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 8
Vollständigkeit
Ein allgemeiner Anfrage-Kalkül Eine Anfrage hat die Form { f (x) | p(x) } wobei • p ist Selektionsprädikat über freien Variablen x, bestehend aus - Termen aus Variablen, Konstanten und Funktionsanwendungen - Prädikaten der Datentypen, etwa , , , . . atomare Formeln über Termen und Prädikaten - Bezug zur aktuellen Datenbank über Datenbankprädikate, (Relationennamen im Relationenmodell) - prädikatenlogischen Operatoren , , , , Formeln
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 9
Vollständigkeit
Relationen für Beispiele für Bereichskalkül Kunde (Kname, Adresse, Konto) bestellt (Kname, WareBez, Anzahl) Ware (WareBez, Preis, Vorrat)
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 10
Vollständigkeit
Beispiel für Anfrage im Bereichskalkül (I) Relationenschema: Kunde (Kname, Adresse, Konto) Anfrage:
“Alle (Namen von) Kunden in Magdeburg“ { x | y z Kunde(x, y, z)
Beispielrelation:
y = MD }
Formel als Selektionsprädikat
Kunde Kname
Adresse
Konto
Ergebnis: Kname
Mueller Maier Schmitz Engels Interpretation
MD PB MD GE
2300 1111 3333 0001
Beispiel-Anfragen
Mueller Schmitz Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 11
Vollständigkeit
Beispiele Bereichskalkül • •
„Alle (Namen von) Kunden in Magdeburg“ {x | Kunde (x, y, z) y = MD } Vereinfachte Notation bedeutet: ungebundene Variablen (hier y und z) im Bedingungsteil existentiell mit gebunden. Vollständige Version: { x | y z Kunde(x, y, z) y = MD }
•
Weitere Vereinfachungen: Einsparung von Bereichsvariablen, indem Konstanten als Parameter des Prädikats eingesetzt werden: { x | Kunde (x , MD , z) } Abkürzung „_“ für beliebige existentiell gebundene Variablen: { x | Kunde (x, MD , _ ) }. Verschiedene Auftreten von „_“ stehen für paarweise verschiedene Variablen! Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 12
Vollständigkeit
Beispiel für Bereichskalkül I Relationenschema: Kunde (Kname, Adresse, Konto) “Alle (Namen von) Kunden in Magdeburg“ { x | y z Kunde(x, y, z)
Formel als Selektionsprädikat
Beispielrelation: Kunde
Kname
y = MD }
Adresse
Konto
Ergebnis: Kname
Mueller Maier Schmitz Engels
Interpretation
MD PB MD GE
Beispiel-Anfragen
2300 1111 3333 0001
Mueller Schmitz
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 13
Vollständigkeit
Beispiele Bereichskalkül II •
“Städte mit mehr als einem Kunden (namen)“ { y | Kunde (x, y, z) Kunde (x , y, z ) x x }
•
Verbundbildung über das 2. Attribut der Kunde-Relation; kann im Bereichskalkül durch die Verwendung derselben Bereichsvariablen y als Parameter in verschiedenen Relationsprädikaten erfolgen. Beispielrelation 1: Kunde
Interpretation
Ergebnis:
Kname
Adresse
Konto
Adresse
Mueller Maier Schmitz Engels
MD PB MD GE
2300 1111 3333 0001
MD
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 14
Vollständigkeit
Beispiele Bereichskalkül II •
“Städte mit mehr als einem Kunden (namen)“ {y | Kunde (x, y, z) Kunde (x , y, z ) x x } Beispielrelation 2: Kunde
Kname
Mueller Maier Mueller Engels
Ergebnis? Adresse
Konto
Adresse
MD PB MD GE
2300 1111 3333 0001
----
Beispielrelation 3: Kunde
Kname Mueller Maier Schmitz Engels
Interpretation
Beispiel-Anfragen
Ergebnis? Adresse Konto MD PB MD GE
2300 1111 2300 0001
Bereichskalkül-Syntax
Adresse MD
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 15
Vollständigkeit
Beispiele Bereichskalkül II •
“Städte mit mehr als einem Kunden (namen) mit demselben Konto“ { y | Kunde (x, y, z) Kunde (x , y, z) x x } Beispielrelation 1: Ergebnis? Kunde Kname Mueller Maier Schmitz Engels
Adresse MD PB MD GE
Konto 2300 1111 3333 0001
Beispielrelation 3: Kunde Kname
Mueller Maier Schmitz Engels Interpretation
Beispiel-Anfragen
Adresse ----
Ergebnis? Adresse
MD PB MD GE
Konto
2300 1111 2300 0001
Bereichskalkül-Syntax
Adresse MD
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 16
Vollständigkeit
Beispiele Bereichskalkül III •
“Welcher Kunde hat welche Waren unter 1,- € bestellt?“
{ x, w | Kunde (x, y, z) bestellt (x, w, a) Ware (w, p, v) a > 0 • Diese Anfrage zeigt einen Verbund über drei Relationen.
p < 1.00 }
Beispielrelationen: Kunde Kname Adresse Konto
Ware
Mueller Maier Schmitz Engels WareBez Mehl Milch
Interpretation
MD PB MD GE Preis
2300 1111 3333 0001 Vorrat
1.30 10.000 0.86 9.500
Beispiel-Anfragen
bestellt Kname WareBez Anzahl Mueller Maier Schmitz Engels
Mehl Milch Mehl Milch
100 95 35 150
Ergebnis: Kname WareBez Maier Milch Engels Milch
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 17
Vollständigkeit
Beispiele Bereichskalkül IV •
“Welcher Kunde hat überhaupt etwas bestellt?“ {x | Kunde (x, y, z) w a (bestellt(x, w, a) a > 0)}
•
Da Variablen aufgrund unserer Notation implizit -quantifiziert sind, können wir die -Quantoren auch weglassen: {x | Kunde (x, y, z) (bestellt(x, w, a) a > 0)} Beispielrelationen: Kunde Kname Adresse Konto Mueller Maier Schmitz Engels
MD PB MD GE
bestellt Kname WareBez Anzahl
2300 1111 3333 0001
Schmitz Mehl Engels Milch
Ergebnis: Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
35 150
Kname Schmitz Engels
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 18
Vollständigkeit
Beispiele Bereichskalkül V •
“Welcher Kunde hat nur Waren in großer Anzahl bestellt?“ { x | Kunde (x, y, z) w a ( bestellt(x, w, a) a > 100 ) }
•
Im Gegensatz zu -Quantoren (im vorigen Beispiel) können -Quantoren nicht weggelassen werden. Beispielrelationen: Kunde Kname Adresse Konto Mueller Maier Schmitz Engels
MD PB MD GE
bestellt Kname WareBez Anzahl
2300 1111 3333 0001
Schmitz Mehl Engels Milch
Ergebnis: schließt auch die ein, die nichts bestellt haben Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
35 150
Kname Engels Maier Mueller
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 19
Vollständigkeit
Beispiele Bereichskalkül VI bestellt
Kname Müller Müller Maier Schmitz Schmitz
WareBez Kartoffeln Eis Kartoffeln Eis Kartoffeln
Anzahl 150 100 160 130 120
“Wer hat nur Waren in großer Anzahl bestellt?“
{x|
w a (bestellt(x, w, a)
a > 100) }
“Wer hat mindestens eine Ware nur in großer Anzahl bestellt?“ { x | a (bestellt(x, w, a) a > 100) }
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 20
Kname Maier Schmitz Kname Müller Maier Schmitz Vollständigkeit
Bereichskalkül (Syntax) •
Terme: Konstanten, etwa 42 oder ‘MD‘ Variablen zu Datentypen, etwa x • Die Datentypangabe erfolgt in der Regel implizit und wird nicht explizit deklariert!
Funktionsanwendung (t1, . . . , tn) für n-stellige Funktion und passende Terme ti Beispiel: plus(12, x) bzw. in Infixnotation 12 + x Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 21
Vollständigkeit
Bereichskalkül (Syntax) •
Atomare Formeln: Prädikatanwendung (t1, . . . , tn) mit Vergleichsoperator op {, , , , =, . . .} und passenden Termen ti. (Zweistellige Prädikate wie üblich infix.) Beispiele: x = y, 42 > x oder z = ‘Paderborn‘ Anwendungen eines Datenbankprädikats R(t1, . . . , tn) für eine n-stellige Relation R und passende Terme ti. Beispiel: bestellung( 21, 21.6.04, 13, ‘Reich‘ )
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 22
Vollständigkeit
Bereichskalkül (Syntax) •
Formeln: wie üblich mit , , ,
•
Anfragen: {x1, . . . , xn | (x1, . . . , xn)} mit Formel über den in der Ergebnisliste aufgeführten Variablen x1 bis xn.
•
Das Ergebnis ist eine Menge von Tupeln (x1, . . . , xn)
•
Die Tupelkonstruktion erfolgt implizit aus den Werten der Variablen in der Ergebnisliste.
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
und .
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 23
Vollständigkeit
Ergebnisbestimmung einer Anfrage { f(x) | p (x) } 1.
Bestimme alle Belegungen der freien Variablen in x = ( x1 : D1, . . . , xn : Dn ) für die das Prädikat p wahr wird.
2.
Wende Funktion f auf die durch diese Belegungen gegebenen Werte an.
•
Problem: Unter welchen Umständen liefern Kalkülanfragen endliche Ergebnisse?
•
Begriff der Sicherheit von Anfragen
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 24
Vollständigkeit
(Semantisch) Sichere Anfragen •
Anfragen, die für jeden Datenbankzustand endliches Ergebnis liefern.
• •
Beispiel einer nicht sicheren Anfrage: { x, y | R(x, y) } Sichere Anfragen: { x, y | R(x, y) } wegen Endlichkeit von R { x, y | R2(x, y, z) z < 10 R(x, y) } Variablen x, y in R(x,y) werden in R2(x,y,z) gebunden
•
Semantische Sicherheit ist im allgemeinen nicht entscheidbar!
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
(R) ein
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 25
Vollständigkeit
Syntaktisch sichere Anfragen •
Anfragen, die syntaktischen Einschränkungen unterliegen, um die semantische Sicherheit zu erzwingen.
•
Grundidee: Jede freie Variable xi muss überall in (x1, . . .) durch positives Auftreten xi = t oder R(. . ., xi, . . . ) an endliche Bereiche gebunden werden. Die Bindung an endliche Bereiche muss für die ganze Bedingung, also insbesondere für alle Zweige einer Disjunktion, gelten
•
(Das gilt unter der Annahme, dass Formel in disjunktiver Normalform vorliegt, d.h. als Disjunktion von Konjunktionen von positiven und negativen Prädikaten.)
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 26
Vollständigkeit
Ausdrucksfähigkeit Bereichskalkül •
Der Bereichskalkül ist relational vollständig, d.h. zu jedem Term der Relationenalgebra gibt es einen äquivalenten (sicheren) Ausdruck des Bereichskalküls.
Begründung: folgende Folien
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 27
Vollständigkeit
Umsetzung von Relationenoperationen Seien zwei Relationenschemata R(A1, . . . , An) und S(B1, . . . , Bm) gegeben.
Vereinigung (für n = m) R S {x1 . . . xn | R (x1, . . ., xn) Differenz (für n = m) R - S {x1 . . . xn | R (x1, . . ., xn)
S (x1, . . . ,xn)}
S (x1, . . . ,xn)}
Kartesisches Produkt RXS { x1 . . . xn xn+1. . . xn+m | R(x1, . . ., xn) S(xn+1, . . ., xn+m) } Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 28
Vollständigkeit
Umsetzung von Relationenoperationen II Projektion {xP1 . . . xPk | xPk+1 . . . xPn : R(x1, . . ., xn)} P(R) Dabei ist Schema(R)=(A1, . . . , An) , Ai ist das Attribut zu xi, (P1, . . . , Pn) eine Permutation der Attributliste (A1, . . . , An) und die Attributliste der Projektion P = (P1, . . . , Pk) . Selektion (R) {x1 . . . xn | R(x1, . . ., xn)
}
Die Formel wird hierbei aus gewonnen, indem Variable xi an Stelle der Attributnamen Ai eingesetzt werden. Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 29
Vollständigkeit
Es gibt 2 verschiedene Relationale Kalküle •
Der Bereichskalkül ist dadurch gekennzeichnet, dass Variablen Werte elementarer Datentypen (Bereiche) annehmen.
•
Im Tupelkalkül hingegen variieren Variablen über Tupelwerte (entsprechend den Zeilen einer Relation).
Interpretation
Beispiel-Anfragen
Bereichskalkül-Syntax
Sichere Anfragen
Grundlagen von Datenbanken - SS 2010 - Prof. Dr. Stefan Böttcher – Folie 30
Vollständigkeit