Domänenkalkül - Universität Paderborn

Werbung
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
Herunterladen