Informationssysteme Sommersemester 2016 Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern [email protected] Anfragesprachen Konjunktive Anfragen Formulierung und einfache Auswertung von Anfragen Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 2 / 43 Anfragesprachen Konjunktive Anfragen Übersicht Inhalte der nächsten Vorlesungen: Konjunktive regelbasierte Anfragen: ans(xna ) ← P rof essoren(xpn , xna , ’C4’, xra ) Relationenkalküle: {t.name |t ∈ P rof essoren ∧ t.rang = ’C4’} Relationale Algebra: πname (σrang=’C4’ (P rof essoren)) SQL: SELECT name FROM Professoren WHERE rang=’C4’ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 3 / 43 Anfragesprachen Konjunktive Anfragen Wir betrachten die Datenbank CINEMA = {Movies, Location, Pariscope} wobei die Relationen Movies, Location und Pariscope die folgenden Schemata haben: sch(M ovies) = {Title, Director, Actor} sch(Location) = {Theater, Address, Phone Number} sch(P ariscope) = {Theater, Title, Schedule} Beispiele und Notationen folgen weitestgehend dem Buch “Foundations of Databases” S.Abiteboul, R. Hull und V. Vianu. PDF ist verfügbar unter http://webdam.inria.fr/Alice/. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 4 / 43 Anfragesprachen Title Movies Director Immer Ärger mit Harry Immer Ärger mit Harry Immer Ärger mit Harry Immer Ärger mit Harry ..... Schreie und Flüstern Schreie und Flüstern Schreie und Flüstern Schreie und Flüstern Prof. Dr.-Ing. S. Michel Hitchcock Hitchcock Hitchcock Hitchcock .... Bergman Bergman Bergman Bergman Konjunktive Anfragen Actor Gwenn Forsythe MacLaine Hitchcock .... Andersson Sylwan Thulin Ullman TU Kaiserslautern Informationssysteme, SS 2016 5 / 43 Anfragesprachen Theater Gaumont Opéra Saint André des Arts Le Champo .... Georges V Les 7 Montparnassiens Prof. Dr.-Ing. S. Michel Konjunktive Anfragen Location Address 31 bd. des Italiens 30 rue Saint André des Arts 51 rue des Ecoles .... 144 av. des Champs-Elysées 98 bd. du Montparnassiens TU Kaiserslautern Phone Number 47 42 60 33 43 26 48 18 43 54 51 60 ... 45 62 41 46 43 20 32 20 Informationssysteme, SS 2016 6 / 43 Anfragesprachen Theater Gaumont Opéra Saint André des Arts Georges V .... Les 7 Montparnassiens Prof. Dr.-Ing. S. Michel Konjunktive Anfragen Pariscope Title Schreie und Flüstern Immer Ärger mit Harry Schreie und Flüstern .... Schreie und Flüstern TU Kaiserslautern Schedule 20:30 20:15 22:15 .... 20:45 Informationssysteme, SS 2016 7 / 43 Anfragesprachen Konjunktive Anfragen Anfragen Wer ist der Regisseur von ’Schreie und Flüstern’ ? In welchem Theater läuft ’Schreie und Flüstern’ ? Was ist die Adresse und die Telefonnummer des Theaters ’Le Champo’ ? Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 8 / 43 Anfragesprachen Konjunktive Anfragen Gib Namen und Adressen der Theater aus, die einen Bergman-Film spielen. Zur Erinnerung: sch(M ovies) sch(Location) sch(P ariscope) = {Title, Director, Actor} = {Theater, Address, Phone Number} = {Theater, Title, Schedule} Kann wie folgt berechnet werden: Falls es jeweils Tupel r1, r2, r3 aus den Relationen Movies, Pariscope, Location gibt, so dass der Regisseur in r1 ’Bergman’ ist und die Titel der Tupel r1 und r2 gleich sind und die Theater in Tupel r2 und r3 gleich sind dann möchten wir Theater und Addresse von Tupel r3. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 9 / 43 Anfragesprachen Konjunktive Anfragen Falls es jeweils in den Relationen Movies, Pariscope und Location Tupel hxti , ’Bergman’, xac i, hxth , xti , xs i und hxth , xad , xs i gibt dann nehme das Tupel hTheater : xth , Address : xad i in die Antwort auf. xti , xth etc. sind Variablen. Wir können die Anfrage umschreiben als ans(xth , xad ) ← Movies(xti , ’Bergman’, xac ), Pariscope(xth , xti , xs ), Location(xth , xad , xp ) wobei ans (für Answer/Antwort) eine Relation über {Theater, Address} ist Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 10 / 43 Anfragesprachen Konjunktive Anfragen Kopf (Head) und Rumpf (Body) Der Ausdruck links von ← wird als Kopf bezeichnet. Der Ausdruck rechts von ← heisst Rumpf. ans(xth , xad ) ← Movies(xti , ’Bergman’, xac ), Pariscope(xth , xti , xs ), Location(xth , xad , xp ) Der obige Ausdruck kann noch vereinfacht werden als ans(xth , xad ) ← Movies(xti , ’Bergman’, Location(xth , xad , ) wobei das Zeichen ein Mal auftreten. ), Pariscope(xth , xti , ), benutzt wird, um alle Variablen zu ersetzen, die nur Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 11 / 43 Anfragesprachen Konjunktive Anfragen Regelbasierte Konjunktive Anfrage Sei R ein Datenbankschema. Eine regelbasierte konjunktive Anfrage über R hat die Form ans(u) ← R1 (u1 ), . . . , Rn (un ) u, u1 , . . . un sind Tupel Notation: falls v =< x1 , ..., xm > dann schreiben wir R(v) anstelle von R(x1 , . . . , xm ) ui muss Stelligkeit (arity) passend zu Ri haben. Jede Variable aus u muss mindestens ein Mal in einem der u1 , . . . , un auftreten. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 12 / 43 Anfragesprachen Konjunktive Anfragen Semantik von Regelbasierten Konjunktiven Anfragen Betrachtet man eine Instanz einer Datenbank, also Ausprägungen von Tupeln in den einzelnen Relationen, dann kann man sich eine Regel so vorstellen, dass wenn man eine gültige Belegung des Rumpfes gefunden hat, der Kopf der Regel das Ergebnis darstellt. Betrachten wir wieder Anfrage q als ans(u) ← R1 (u1 ), . . . , Rn (un ) und eine Instanz (Ausprägung) I der Datenbank R. Das Abbild von I unter Anfrage q ist q(I) = {ν(u) | ν ist eine Belegung der Variablen aus q und ν(ui ) ∈ I(Ri ), ∀i ∈ [1, n]} Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 13 / 43 Anfragesprachen Konjunktive Anfragen Belegung von Variablen: Beispiel ans(xth , xad ) ← Movies(xti , ’Bergman’, xac ), Pariscope(xth , xti , xs ), Location(xth , xad , xp ) Betrachten wir folgende Belegung der Variablen: ν(xti ) = ’Schreie und Flüstern’ ν(xac ) = ’Ullman’ ν(xth ) = ’Gaumont Opera’ ν(xs ) = ’20:30’ ν(xad ) = ’31 bd. des Italiens’ ν(xp ) = ’47 42 60 33’ Dies ist eine gültige Belegung, da Tupel (ν(xti ),“Bergman”,ν(xac )) = (“Schreie und Flüstern”,“Bergman”,“Ullman”) ∈ I(M ovies), für unsere Beispiel Ausprägung I, analog für die beiden anderen Relationen bzw. Tupel. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 14 / 43 Anfragesprachen Konjunktive Anfragen Weitere Beispiele Finde Name und Personalnummer aller C4 Professoren: ans(xna , xpn ) ← P rof essoren(xpn , xna , ’C4’, xra ) Welche Vorlesungen bietet Prof. Sokrates an? ans(xti ) ←P rof essoren(xpn , ’Sokrates’, xrg , xra ), V orlesungen(xvn , xti , xsw ), lesen(xpn , xvn ) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 15 / 43 Anfragesprachen Konjunktive Anfragen Intensionale vs. Extensionale Relationen Wir berechnen durch die Erstellung von Anfragen nicht nur Ergebnisse, sondern definieren dabei implizit auch neue Relationen, z.B. die neue Relation C4P rof s, die alle Professoren mit Rang C4 enthält: C4P rof s(xpn ,xna , xra ) ← P rof essoren(xpn , xna , ’C4’, xra ) Man unterscheidet zwischen Relationen, die ursprünglich in der Datenbank vorhanden sind, den sogenannten extensionalen Relationen, und Relationen, die durch Regeln definiert werden, den sogenannten intensionalen Relationen. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 16 / 43 Anfragesprachen Konjunktive Anfragen Auswertung (aka. Berechnung) der Anfrage Naive brute-force Methode zur Berechnung der Anfrageergebnisse: Betrachtung aller möglichen Belegung anhand der in den Relationen auftretenden Werte. Für jede dieser Belegungen schauen ob es eine gültige Belegung ist. Diese Vorgehensweise ist natürlich sehr teuer. Z.B. für M ovies(x1 ,’Bergman’,x2 ) machen nur Belegungen Sinn, die für dieses Tupel mit x1 und x2 aus M ovies den Regisseur gleich ’Bergman’ haben. Idealerweise kann man mit sogenannten Indexen die Auswahl die Suche nach geeigneten Tupeln beschleunigen. Dazu kommen wir später im Abschnitt über Anfrageverarbeitung und Indexstrukturen. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 17 / 43 Anfragesprachen Konjunktive Anfragen Monotonie Monotonie: Eine Anfrage q über R ist monoton wenn für jede Ausprägungen (Instanzen) I, J über R, gilt: Falls I ⊆ J dann q(I) ⊆ q(J). D.h. wenn neue Tupel zu den Relationen hinzukommen fallen keine Ergebnistupel weg. Konjunktive Anfragen sind monoton Welche Anfragen sind somit nicht möglich? Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 18 / 43 Anfragesprachen Konjunktive Anfragen Anfragen im konjunktiven Kalkül Gegeben eine konjunktive regelbasierte Anfrage ans(e1 , . . . , em ) ← R1 (u1 ), . . . , Rn (un ) Die dazu äquivalente Anfrage im konjunktiven Kalkül ist {e1 , . . . , em | ∃x1 , . . . , xk (R1 (u1 ) ∧ . . . ∧ Rn (un ))} Die Variablen x1 , x2 , . . . xk sind die Variablen, die im Rumpf aber nicht im Kopf der regelbasierten Anfrage auftreten. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 19 / 43 Anfragesprachen Konjunktive Anfragen Anfragen im konjunktiven Kalkül: Beispiel ans(xth , xad ) ← M ovies(xti , ’Bergman’, xac ), P ariscope(xth , xti , xs ), Location(xth , xad , xp ) ans := {xth , xad | ∃ xti ∃ xac ∃ xs ∃ xp (M ovies(xti ,’Bergman’, xac ) ∧ P ariscope(xth , xti , xs ) ∧ Location(xth , xad , xp ))} Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 20 / 43 Anfragesprachen Konjunktive Anfragen Sei R ein Datenbankschema. Eine Formel über R im konjunktiven Kalkül ist ein Ausdruck, der eine der folgenden Formen besitzt: (a) ein Atom über R der Form Ri (ui ) (b) (φ ∧ ψ), mit Formeln φ und ψ über R; oder (c) ∃xφ, wobei x eine Variable ist und φ ist eine Formel über R. Freie Variablen: Ein Auftreten einer Variablen x in einer Formel φ ist frei falls (i) φ ist ein Atom; oder (ii) φ = (ψ ∧ ξ) und das Auftreten von x ist frei in ψ oder ξ; oder (iii) φ = ∃yψ, x und y sind verschiedene Variablen, und das Auftreten von x ist frei in ψ Falls eine Variable nicht frei ist so nennen wir sie gebunden. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 21 / 43 Anfragesprachen Konjunktive Anfragen Anfragen im konjunktiven Kalkül Eine Anfrage im konjunktiven Kalkül über Datenbankschema R ist ein Ausdruck der Form {e1 , ..., em | φ} wobei φ eine Formel des konjunktiven Kalküls ist und die Variablen e1 , . . . ,em und sind identisch zur Menge der freien Variablen in φ. Theorem Regelbasierte konjunktive Anfragen und Anfragen im konjunktiven Kalkül sind äquivalent. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 22 / 43 Anfragesprachen Konjunktive Anfragen Gleichheit bzw. Vergleichsoperatoren ans(xth , xad ) ← M ovies(xti , xd , xac ), xd = ’Bergman’, P ariscope(xth , xti , xs ), Location(xth , xad , xp ) ist identisch zu ans(xth , xad ) ← M ovies(xti , ’Bergman’, xac ), P ariscope(xth , xti , xs ), Location(xth , xad , xp ) Ebenfalls möglich Vergleichsoperatoren, z.B. ans(xma ) ← Studenten(xma , xna , xse ),xse ≥ 12 Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 23 / 43 Anfragesprachen Konjunktive Anfragen Anfrage-Programm Wie erwähnt, kann konzeptionell eine Anfrage so aufgefasst werden, dass sie eine neue Relation erzeugt, die dann in nachfolgenden Anfragen benutzt werden kann. Ein konjunktives Anfrage-Programm ist eine Sequenz von Regeln in der Form S1 (u1 ) ← body1 S2 (u2 ) ← body2 ··· Sm (um ) ← bodym Rekursion sei nicht zugelassen. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 24 / 43 Anfragesprachen Konjunktive Anfragen Beispiel S1 (x, z) ← Q(x, y),R(y, z,w) S2 (x, y, z) ← S1 (x,w),R(w, y, v), S1 (v, z) S3 (x, z) ← S2 (x, u, v), Q(v, z) Q 1 2 2 2 1 2 1 2 3 4 R 1 3 1 4 S1 1 1 2 1 Prof. Dr.-Ing. S. Michel 1 2 2 3 1 3 TU Kaiserslautern 1 1 2 2 S2 1 1 1 1 S3 1 3 1 3 1 2 Informationssysteme, SS 2016 2 2 25 / 43 Anfragesprachen Konjunktive Anfragen Beispiel S1 (x, z) ← Q(x, y),R(y, z,w) S2 (x, y, z) ← S1 (x,w),R(w, y, v), S1 (v, z) S3 (x, z) ← S2 (x, u, v), Q(v, z) Wir können für die ersten beiden Zeilen auch schreiben als S2 (x, y, z) ← Q(x1 , y1 ),R(y1 , z1 ,w1 ), x = x1 ,w = z1 , R(w, y, v),Q(x2 , y2 ),R(y2 , z2 ,w2 ), v = x2 , z = z2 bzw. ohne Gleichheits-Operator S2 (x, y, z) ← Q(x, y1 ),R(y1 ,w,w1 ), R(w, y, v), Q(v, y2 ),R(y2 , z,w2 ) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 26 / 43 Anfragesprachen Konjunktive Anfragen Sichten (Englisch: Views) M arilyn(xt ) ← M ovies(xt , xd , ’Monroe’) ChampoInf o(xt , xs , xp ) ← P ariscope(’Le Champo’, xt , xs ), Location(’Le Champo’, xa , xp ) Versuchen wir damit die folgende Anfrage auszudrücken: “Welche Titel in M arilyn werden im Le Champo um 21:00 Uhr gespielt?” ans(xt ) ← M arilyn(xt ), ChampoInf o(xt , ’21:00’, xp ) Falls diese Sichten nur virtuell sind (also nicht wirklich materialisiert/ausgeprägt) so wird die Anfrage doch ausgeführt via ans(xt ) ← M ovies(xt , xd , ’Monroe’), P ariscope(’Le Champo’, xt , ’21:00’), Location(’Le Champo’, xa , xp ) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 27 / 43 Anfragesprachen Konjunktive Anfragen Views (2) Eine alternative Formulierung: M arilyn := {xt | ∃ xd (M ovies(xt , xd ,’Monroe’))}; ChampoInf o := {xt , xs , xp | ∃xa (P ariscope(’Le Champo’, xt , xs ) ∧Location(’Le Champo’, xa , xp ))}; ans := {xt | M arilyn(xt ) ∧ ∃ xp (ChampoInf o(xt , ’21:00’, xp ))} Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 28 / 43 Anfragesprachen Konjunktive Anfragen Was ist mit Negation? Lassen wir nun Literale Li der Form R(v) oder ¬R(v) zu, d.h. wir haben Regeln q : S(u) ← L1 , . . . , Ln wobei R der Name einer Relation ist, v ist ein Tupel der passenden Stelligkeit und S tritt nicht im Rumpf der Regel auf (also: nicht rekursiv). Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 29 / 43 Anfragesprachen Konjunktive Anfragen “In welchen Hitchcock Filmen hat Hitchcock nicht mitgespielt?” ans ← M ovies(x, ’Hitchcock’, z), ¬M ovies(x, ’Hitchcock’, ’Hitchcock’) Was muss in der Datenbank gelten, damit diese Anfrage korrekt ist? Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 30 / 43 Anfragesprachen Konjunktive Anfragen Gib alle Filme aus, bei denen nur Schauspieler mitgewirkt haben, ” die mal unter Hitchcock Regie gespielt haben.“ Hitch−actor(z) ← M ovies(x, ’Hitchcock’, z) not−ans(x) ← M ovies(x,y,z), ¬Hitch−actor(z) ans(x) ← M ovies(x,y,z), ¬not−ans(x) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 31 / 43 Anfragesprachen Relationenkalkül Relationenkalküle: Das Domänenkalkül Wenn wir zum konjunktiven Kalkül die Negation hinzunehmen, erhalten wir ein Relationenkalkül, nämlich das Domänenkalkül. Es gibt auch noch ein weiteres Relationenkalkül, das Tupelkalkül, welches wir uns später ansehen. Wir erlauben nun auch gleich noch weitere Vergleichsoperatoren, haben also Basis-Formeln (Atome) der Form R(u) mit Relation R und Tupel u über Domänenvariablen und Konstanten, sowie Atome der Form e = e0 , e 6= e0 , e ≥ e0 etc. für Domänenvariablen oder Konstanten e und e0 . Alle Atome sind Formeln. Darauf basierend haben wir Formeln der Form (φ ∧ ψ) für Formeln ψ und φ (φ ∨ ψ) für Formeln ψ und φ ¬φ für Formeln φ ∃xφ für Variable x und Formel φ ∀xφ für Variable x und Formel φ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 32 / 43 Anfragesprachen Relationenkalkül “In welchen Hitchcock Filmen hat Hitchcock nicht mitgespielt?” {xt | ∃xa M ovies(xt , ’Hitchcock’, xa ) ∧¬M ovies(xt , ’Hitchcock’, ’Hitchcock’)} “Gib alle Filme aus, bei denen nur Schauspieler mitgewirkt haben, die mal unter Hitchcock Regie gespielt haben.” {xt | ∃xd , xa M ovies(xt , xd , xa ) ∧∀ya (∃yd M ovies(xt , yd , ya ) ⇒ ∃zt M ovies(zt , ’Hitchock’, ya ))} Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 33 / 43 Anfragesprachen Relationenkalkül Das Relationale Tupelkalkül Das bislang betrachtetete Relationen Kalkül wird auch als relationales Domänenkalkül bezeichnet, da dort Domänenvariablen an die Domänen der einzelnen Attribute (Spalten) der Relationen gebunden werden. Eine Anfrage im relationalen Tupelkalkül hat die Form {t | P (t)} wobei t eine Tupelvariable ist und P (t) ein Prädikat (eine Formel). P (t) muss erfüllt sein damit t Teil des Ergebnis ist. {t.title | ∃ s ∈ M ovies (t.title = s.title ∧ s.director = ‘Hitchcock’ ∧¬∃u ∈ M ovies (u.title = s.title ∧ u.actor = ‘Hitchcock’))} Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 34 / 43 Anfragesprachen Relationenkalkül Das Relationale Tupelkalkül: Definition Formeln des Tupelkalküls bestehen aus Atomen der Form t ∈ R, mit Tupelvariabel t und Relation R, der Form t.x = t.y, t.x > t.y, etc. für Tupelvariablen t und s und Attributnamen x und y, sowie der Form t.x = c und t.x > c etc. für Konstanten c. Alle Atome sind Formeln und dann haben wir noch Formeln der Form (φ ∧ ψ) für Formeln ψ und φ (φ ∨ ψ) für Formeln ψ und φ ¬φ für Formeln φ ∃xφ für Variable x und Formel φ ∀xφ für Variable x und Formel φ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 35 / 43 Anfragesprachen Relationenkalkül Beispiele C4-Professoren: {p | p ∈ P rof essoren ∧ p.Rang = C4} Paare von Professoren (Name) und Assistenten (PersNr): {p.N ame, a.P ersN r | p ∈ P rof essoren ∧ a ∈ Assistenten ∧p.P ersN r = a.Boss} Studenten mit mindestens einer Vorlesung von Prof. Curie: {s|s ∈ Studenten ∧ ∃ h ∈ hören (s.M atrN r = h.M atrN r ∧ ∃ v ∈ V orlesungen (h.V orlN r = v.V orlN r ∧ ∃ p ∈ P rof essoren (p.P ersN r = v.gelesenV on ∧ p.N ame = ‘Curie‘)))} Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 36 / 43 Anfragesprachen Relationenkalkül .... in SQL ... ist es sehr ähnlich: Studenten mit mindestens einer Vorlesung von Prof. Curie: SELECT s.* FROM Studenten s WHERE EXISTS ( SELECT h.* FROM hören h WHERE h.MatrNr=s.MatrNr AND EXISTS ( SELECT * FROM Vorlesungen v WHERE v.VorlNr=h.VorlNr AND EXISTS ( SELECT * FROM Professoren p WHERE p.Name=’Curie’ AND p.PersNr=v.gelesenVon))) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 37 / 43 Anfragesprachen Relationenkalkül Sicherheit von Anfragen Einschränkung auf Anfragen mit endlichem Ergebnis. Zum Beispiel ist die Anfrage {n|¬(n ∈ P rof essoren)} nicht sicher. Das Ergebnis ist unendlich. Bedingung: Ergebnis des Ausdrucks muss Teilmenge der Domäne der Formel sein. Die Domäne einer Formel enthält alle in der Formel vorkommenden Konstanten alle Attributwerte von Relationen, die in der Formel referenziert werden Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 38 / 43 Anfragesprachen Relationenkalkül Unsichere Anfragen im Domänenkalkül {x | ¬M ovies(’Schreie und Flüstern’, ’Bergman’, x)} {xpn , xna , xrg , xra | ¬P rof essoren(xpn , xna , xrg , xra )} {x, y | M ovies(’Schreie und Flüstern’, ’Bergman’, x) ∨M ovies(y, ’Bergman’, ’Ullman’)} Wieso sind diese Anfragen unsicher? Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 39 / 43 Anfragesprachen Relationenkalkül Sicherheit des Domänenkalküls Sicherheit ist analog zum Tupelkalkül, aber etwas komplizierter, da Variablen nicht an Tupel einer Relation sondern an einzelne Domänen gebunden sind. Zum Beispiel ist {xpn , xna , xrg , xra | ¬(P rof essoren(xpn , xna , xrg , xra ))} nicht sicher. Ein Ausdruck {x1 , x2 , ..., xn | P (x1 , x2 , ..., x3 )} ist sicher, falls folgende drei Bedingungen gelten: Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 40 / 43 Anfragesprachen Relationenkalkül {x1 , x2 , ..., xn |P (x1 , x2 , ..., x3 )} sicher falls .... 1. Falls Tupel (c1 , c2 , ..., cn ) mit Konstanten ci im Ergebnis enthalten ist, so muss jedes ci (1 ≤ i ≤ n) in der Domäne von P enthalten sein. 2. Für jede existenz-quantifizierte Teilformel ∃x(P1 (x)) muss gelten, dass P1 nur für Elemente aus der Domäne erfüllbar sein kann – oder evtl. für gar keine. Das heisst: Wenn für eine Konstante c das Prädikat P1 (c) erfüllt ist, so muss c in der Domäne von P1 enthalten sein. 3. Für jede universal-quantifizierte Teilformel ∀x(P1 (x)) muss gelten, dass sie dann und nur dann erfüllt ist, wenn P1 (x) für alle Werte der Domäne von P1 erfüllt ist. Das heisst: P1 (d) muss für alle d, die nicht in der Domäne von P1 enthalten sind, auf jeden Fall erfüllt sein. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 41 / 43 Anfragesprachen Relationenkalkül Zusammenfassung Konjunktive regelbasierte Anfragen und Kalküle, als regel- bzw. logikbasierte Möglichkeit Anfragen zu erstellen Dabei geben diese Anfragen vor wie Ergebnistupel aussehen sollen bzw. wie sie zusammengehören, aber nicht wie das Ergebnis tatsächlich berechnet werden soll. Sogenannte deklarative Anfragen. Domänenkalkül und Tupelkalkül gleich ausdrucksstark (mächtig). Wie bereits erwähnt, ist auch SQL deklarativ und durch das relationale Tupelkalkül inspiriert. Wir betrachten nun die relationale Algebra. Und danach SQL. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 42 / 43 Anfragesprachen Relationenkalkül Übersicht Konjunktive regelbasierte Anfragen: ans(xna ) ← P rof essoren(xpn , xna , ’C4’, xra ) Relationenkalküle: {t.name |t ∈ P rof essoren ∧ t.rang = ’C4’} Relationale Algebra: πname (σrang=’C4’ (P rof essoren)) SQL: SELECT name FROM Professoren WHERE rang=’C4’ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Informationssysteme, SS 2016 43 / 43