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