Grundlagen von Datenbanken

Grundlagen von Datenbanken SS 2010 5. Bereichskalkül (=Domänenkalkül) Prof. Dr. Stefan Böttcher Universität Paderborn Agenda: Interpretation mit Mat...
Author: Kornelius Beyer
4 downloads 1 Views 490KB Size
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