Beispiel
Transcription
Beispiel
7. Grundlagen von Anfragen ■ Kriterien für Anfragesprachen ■ Anfragealgebren ■ Anfrage-Kalküle ■ Änderungsoperationen Einführung ■ bisher ; Relationenschemata mit Basisrelationen, die in der Datenbank gespeichert sind ■ jetzt ; „abgeleitete“ Relationenschemata mit virtuellen Relationen, die aus den Basisrelationen berechnet werden (Basisrelationen bleiben unverändert) VL Datenbanken I – 7–1 Einführung II ■ ■ ■ VL Datenbanken I – 7–2 Kriterien für Anfragesprachen Anfrage: Folge von Operationen, die aus den Basisrelationen eine Ergebnisrelation berechnet Ergebnisrelation ◆ interaktiv auf dem Bildschirm anzeigen, ◆ per Programm weiterverarbeiten („Einbettung“) Sicht: Folge von Operationen, die unter einem Sichtnamen langfristig abgespeichert wird und unter diesem Namen wieder aufgerufen werden kann; ergibt eine Sichtrelation Snapshot: Ergebnisrelation einer Anfrage, die unter einem Snapshot-Namen abgelegt wird, aber nie ein zweites Mal (mit geänderten Basisrelationen) berechnet wird (etwa Jahresbilanzen) VL Datenbanken I – 7–3 ■ Ad-Hoc-Formulierung: Der Benutzer soll eine Anfrage formulieren können, ohne ein vollständiges Programm schreiben zu müssen. ■ Deskriptivität: Der Benutzer soll formulieren „Was will ich haben?“ und nicht „Wie komme ich an das, was ich haben will?“. ■ Mengenorientiertheit: Jede Operation soll auf Mengen von Daten gleichzeitig arbeiten, nicht navigierend nur auf einzelnen Elementen (one-tuple-at-a-time). ■ Abgeschlossenheit: Das Ergebnis ist wieder eine Relation und kann wieder als Eingabe für die nächste Anfrage verwendet werden. VL Datenbanken I – 7–4 Kriterien für Anfragesprachen II Kriterien für Anfragesprachen III ■ Adäquatheit: Alle Konstrukte des zugrundeliegenden Datenmodells werden unterstützt. ■ Orthogonalität: Sprachkonstrukte sind in ähnlichen Situationen auch ähnlich anwendbar. ■ Optimierbarkeit: Die Sprache besteht aus wenigen Operationen, für die es Optimierungsregeln gibt. ■ Effizienz: Jede Operation ist effizient ausführbar (im Relationenmodell hat jede Operation eine Komplexität ≤ O(n2 ), n Anzahl der Tupel einer Relation). ■ Sicherheit: Keine Anfrage, die syntaktisch korrekt ist, darf in eine Endlosschleife geraten oder ein unendliches Ergebnis liefern. ■ Eingeschränktheit: (folgt aus Sicherheit, Optimierbarkeit, Effizienz) Die Anfragesprache darf keine komplette Programmiersprache sein. ■ Vollständigkeit: Die Sprache muß mindestens die Anfragen einer Standardsprache (wie etwa die in diesem Kapitel einzuführende Relationenalgebra oder den sicheren Relationenkalkül) ausdrücken können. VL Datenbanken I – 7–5 Anfragealgebren VL Datenbanken I – 7–6 Relationenalgebra ■ für Datenbankanfragen: Inhalte der Datenbank sind Werte, und Operatoren definieren Funktionen zum Berechnen von Anfrageergebnissen Spalten ausblenden: Projektion, Zeichen π ; in [. . . ]: welche Spalten behalten; in (. . . ): auf welche Relation anwenden ■ Relationenalgebra NF2 -Algebra ◆ Andere Algebra-Erweiterungen Zeilen heraussuchen: Selektion, Zeichen σ ; in [. . . ]: unter welchen Bedingungen; in (. . . ): auf welche Relation anwenden ■ Tabellen verknüpfen: Verbund (Join), Zeichen ./; Tupel über gleichbenannten Spalten und Werten aneinanderhängen ■ Tabellen vereinigen: Vereinigung, Zeichen ∪; Tupel aus beiden Relationen sammeln, doppelte herauswerfen ■ Mathematik: Algebra definiert durch Wertebereich und auf diesem definierte Operatoren ■ ◆ ◆ VL Datenbanken I – 7–7 VL Datenbanken I – 7–8 Relationenalgebra II Laufendes Beispiel ■ Tabellen voneinander abziehen: Differenz, Zeichen −; Tupel aus der ersten Relation herausnehmen, falls sie auch in der zweiten Relation vorkommen ■ Spalten umbenennen: Umbenennung, Zeichen β ; einen Attributnamen in einen anderen umbenennen (wichtig für ./ und ∪, −) Ausleih Buch Invnr 4711 1201 0007 4712 Name Meyer Schulz Müller Meyer Invnr Titel ISBN 0007 Dr. No 3-125 1201 Objektbanken 3-111 4711 Datenbanken 3-765 4712 Datenbanken 3-891 4717 Pascal 3-999 Autor James Bond Heuer Vossen Ullman Wirth VL Datenbanken I – 7–9 Projektion ■ VL Datenbanken I – 7–10 Projektion II Syntax ■ π [attributmenge] (relation) ■ Beispiel 1: Projektion auf ein Attribut π [Name] (Ausleih) Semantik ergibt als Ergebnisrelation πX (r) := {t(X) | t ∈ r} Name für r(R) und X ⊆ R Attributmenge in R. Meyer Schulz Müller ■ VL Datenbanken I – 7–11 Doppelte Ergebnistupel eliminiert VL Datenbanken I – 7–12 Projektion III ■ Projektion IV Beispiel 2: Projektion auf Attributmenge ■ π [Invnr, ISBN] (Buch) einfache Optimierungsregel: bei vielen Projektionen hintereinander reicht die zuletzt ausgeführte auch allein π [Invnr] (π [Invnr, ISBN] (Buch)) ergibt ergibt optimiert Invnr ISBN 0007 3-125 1201 3-111 4711 3-765 4712 3-891 4717 3-999 π [Invnr] (Buch) VL Datenbanken I – 7–13 Selektionsbedingungen Selektion ■ VL Datenbanken I – 7–14 ■ F Syntax σ [bedingung] (relation) ■ Konstanten-Selektion Attribut θ Konstante boolesches Prädikat θ ist = oder 6=, bei linear geordneten Wertebereichen auch ≤, <, ≥ oder > Semantik σF (r) := {t | t ∈ r ∧ F (t) = true} ■ F Attribut-Selektion Attribut1 θ Attribut2 ■ F logische Verknüpfung mehrerer Konstanten- oder Attribut-Selektionen mit ∧, ∨ oder ¬ VL Datenbanken I – 7–15 VL Datenbanken I – 7–16 Selektion II ■ Selektion III Beispiel ■ σ [Name ≤ ‘N’] (Ausleih) ergibt Invnr Name 4711 Meyer einfache Optimierungsregeln ◆ Selektionen lassen sich in der Reihenfolge beliebig vertauschen ◆ Manchmal lassen sich Projektion und Selektion vertauschen; Voraussetzung: Selektionsattribute kommen in Projektionsliste vor 0007 Müller 4712 Meyer VL Datenbanken I – 7–17 Verbund: Beispiel Verbund ■ Ausleih ./ Buch Syntax des (natürlichen) Verbundes (engl.: natural join) ergibt Relation1 ./ Relation2 ■ VL Datenbanken I – 7–18 Semantik r1 ./ r2 := {t | t(R1 ∪ R2 ) ∧ [∀i ∈ {1, 2}∃ti ∈ ri : ti = t(Ri )]} ■ Verbund verknüpft Tabellen über gleichbenannten Spalten bei gleichen Attributwerten VL Datenbanken I – 7–19 Name Invnr Titel ISBN Autor Müller 0007 Mr. No Schulz 1201 Objektbanken 3-111 Heuer Meyer 4711 Datenbanken 3-765 Vossen Meyer 4712 Datenbanken 3-891 Ullman 3-125 James Bond ■ nicht ausgeliehenes Pascal-Buch verschwindet: Tupel, die keinen Partner finden (dangling tuples), werden eliminiert ■ später: outer join, der „dangling tuples“ übernimmt VL Datenbanken I – 7–20 Eigenschaften Verbund Verbund II π [Autor] (Buch) ./ π [Invnr] (Ausleih) Autor Invnr James Bond 4711 James Bond 1201 James Bond 0007 James Bond 4712 Heuer 4711 Heuer 1201 Heuer 0007 Heuer 4712 Vossen 4711 ... ... entartet zu kartesischem Produkt ■ aus R1 ∩ R2 = {} folgt r1 ./ r2 = r1 × r2 ■ Projektion nicht inverse Operation zu Verbund: πR1 (r1 ./ r2 ) ⊆ r1 ■ Verbund nicht die inverse Operation zu zwei Projektionen (nur bei Verbundtreue) ■ Verbund kommutativ: r1 ./ r2 = r2 ./ r1 ■ Verbund assoziativ: (r1 ./ r2 ) ./ r3 = r1 ./ (r2 ./ r3 ) ■ Daher erlaubt: ./pi=1 ri VL Datenbanken I – 7–21 Mengenoperationen und Umbenennung Buch1 Autor1 James Bond Heuer Vossen Ullman Wirth ■ VL Datenbanken I – 7–22 Mengenoperationen: Vereiningung relation1 ∪ relation2 Beispiel: Buch1 ∪ β [Autor1 ← Autor2] (Buch2) Autor1 James Bond Heuer Vossen Ullman Wirth Witt Silberschatz Meier Buch2 Autor2 Witt Vossen Silberschatz Meier Wirth Umbenennung β [neu ← alt] (relation) ändert Attributnamen von alt in neu β [Autor1 ← Autor2] (Buch2) Durch Umbenennung nun Vereinigung, Differenz und Durchschnitt möglich VL Datenbanken I – 7–23 VL Datenbanken I – 7–24 Mengenoperationen: Differenz Mengenoperationen: Durchschnitt relation1 − relation2 Beispiel: Buch1 − β [Autor1 ← Autor2] (Buch2) Autor1 James Bond Heuer Ullman relation1 ∩ relation2 Beispiel: Buch1 ∩ β [Autor1 ← Autor2] (Buch2) Autor1 Vossen Wirth VL Datenbanken I – 7–25 VL Datenbanken I – 7–26 Mengenoperationen, Umbenennung I Mengenoperationen, Umbenennung II Umbenennung ermöglicht Formal für r1 (R) und r2 (R) ■ Verbunde, wo bisher kartesische Produkte ausgeführt wurden (unterschiedliche Attribute werden gleich benannt), ■ kartesische Produkte, wo bisher Verbunde ausgeführt wurden (gleiche Attribute werden unterschiedlich genannt), ■ ■ Umbenennung βB←A (r) := {t0 | ∃t ∈ r : t0 (R − A) = t(R − A) ∧ t0 (B) = t(A)} ■ Vereinigung r1 ∪ r2 := {t | t ∈ r1 ∨ t ∈ r2 } ■ Durchschnitt r1 ∩ r2 := {t | t ∈ r1 ∧ t ∈ r2 } ■ Differenz r1 − r2 := {t | t ∈ r1 ∧ t 6∈ r2 } Durchschnitt ∩ wegen r1 ∩ r2 = r1 − (r1 − r2 ) überflüssig Mengenoperationen VL Datenbanken I – 7–27 VL Datenbanken I – 7–28 Unabhängigkeit und Vollständigkeit ■ Problem: Quantoren Minimale Relationenalgebra: ■ Allquantor in Relationenalgebra ausdrücken, obwohl in Selektionsbedingungen nicht erlaubt ■ Division (kann aus Ω hergeleitet werden) Ω = π , σ , ./, β , ∪ und − ■ unabhängig: kein Operator kann weggelassen werden ohne Vollständigkeit zu verlieren ■ andere unabhängige Menge: ./ und β durch × ersetzen und r2 (R2 ) gegeben mit R2 ⊆ R1 , R0 = R1 − R2 . Dann ist ■ Relationale Vollständigkeit: jede andere Menge von Operationen genauso mächtig wie Ω r0 (R0 ) = {t | ∀t2 ∈ r2 ∃t1 ∈ r1 : t1 (R0 ) = t ∧ t1 (R2 ) = t2 } = r 1 ÷ r2 ■ Strenge relationale Vollständigkeit: zu jedem Ausdruck mit Operatoren aus Ω gibt es einen Ausdruck auch mit der anderen Menge von Operationen ■ r1 (R1 ) ■ Division von r1 durch r2 r1 ÷ r2 = πR0 (r1 ) − πR0 ((πR0 (r1 ) ./ r2 ) − r1 ) VL Datenbanken I – 7–29 NF2-Algebra Division: Beispiel r1 PILOT Snoopy Snoopy Snoopy Meyer Meyer Müller Müller Müller Müller Lüdenscheid r1 ÷ r2 ergibt r0 PILOT Snoopy Müller FLUGZ. 707 727 747 707 727 707 727 747 777 727 VL Datenbanken I – 7–30 ■ ∪, −, π, ./ zunächst wie in Relationenalgebra ■ σ -Bedingungen r2 FLUGZ. 707 727 747 r3 erweitern um: Relationen als Operanden (statt nur Konstanten von Standard-Datentypen) ◆ Mengenvergleiche, wie etwa θ : =, ⊆, ⊂, ⊃, ⊇ ◆ FLUGZ. 707 ■ rekursiv aufgebaute Operationsparameter, etwa π und σ auch innerhalb von Projektionslisten und Selektionsbedingungen anwendbar ■ zusätzliche Operationen ν (Nestung) und µ (Entnestung) r1 ÷ r3 ergibt r0 PILOT Snoopy Meyer Müller VL Datenbanken I – 7–31 VL Datenbanken I – 7–32 Spezielle NF2-Algebren Nestung und Entnestung A 1 1 1 2 B 2 3 4 1 C 7 6 5 1 −→ νB,C;D (r) A D B C 2 7 1 3 6 ←− 4 5 0 µD (r ) 2 1 1 Nestung nicht allgemein die Inverse der Entnestung: A D A B C 6−→ B C 1 2 7 νB,C;D (r) 1 2 7 1 3 6 3 6 ←− 1 4 5 1 4 5 µD (r0 ) 2 1 1 2 1 1 ■ Minimale geschachtelte Algebra nur ν und µ ■ Orthogonale geschachtelte Algebra Schek und Scholl: Selektion und Projektion rekursiv ■ Algebren für PNF-Relationen erhalten PNF-Eigenschaft VL Datenbanken I – 7–33 Andere Algebra-Erweiterungen VL Datenbanken I – 7–34 Andere Algebra-Erweiterungen (II) ■ Nullwerte ■ Operationen auf Wertebereichen (Spaltenerweiterung, abgeleitete Attribute) ■ Gruppierung ■ ... ■ Nullwerte A B r1 a b a ∃ r2 B C b c ∃ c ∃: „Wert existiert, aber zur Zeit nicht bekannt“ Verbund A B C a VL Datenbanken I – 7–35 b c VL Datenbanken I – 7–36 Andere Algebra-Erweiterungen (III) ■ Nullwerte (fortg.) definit- und maybe-Markierungen r1 A a a B b ∃ STATUS B b ∃ r2 d d C c c STATUS d Anfrage-Kalküle ■ Kalkül: eine formale logische Sprache zur Formulierung von Aussagen ■ Ziel: Einsatz eines derartigen Kalküls zur Formulierung von Datenbank-Anfragen ■ Logikbasierter Ansatz: d r1 |./ r2 liefert A a a a a B b b b ∃ C c c c c Datenbankinhalte entsprechen Belegungen von Prädikaten einer Logik, Anfragen abgeleiteten Prädikaten STATUS d m m m VL Datenbanken I – 7–37 Ein allgemeiner Kalkül ■ Ein allgemeiner Kalkül II Motivation: mathematische Notation ■ {x2 | x ∈ IN ∧ x3 > 0 ∧ x3 < 1000} ■ VL Datenbanken I – 7–38 Anfrage hat die Form Funktion f bezeichnet Ergebnisfunktion über x wichtige Spezialfälle: Angabe einer Variable selber (f ist hier die Identitätsfunktion) und Tupelkonstruktion (Ergebnis vom Typ tuple of) ■ p {f (x) | p(x)} ◆ x Selektionsprädikat über freien Variablen x Terme aus Variablen, Konstanten und Funktionsanwendungen ◆ Prädikate der Datentypen, etwa ≤, <, >, ≥, ... → atomare Formeln über Termen ◆ Bezug zur aktuellen Datenbank → Datenbankprädikate, z.B. Relationennamen im RM ◆ prädikatenlogischen Operatoren ∧, ∨, ¬, ∀, ∃ → Formeln ◆ bezeichnet Menge von freien Variablen x = {x1 : D1 , . . . , xn : Dn } VL Datenbanken I – 7–39 VL Datenbanken I – 7–40 Ergebnisbestimmung einer Anfrage Relationale Kalküle x = {x1 : D1 , . . . , xn : Dn } 1. Bestimme aller Belegungen der freien Variablen in x, für die das Prädikat p wahr wird. ■ Bereichskalkül: Variablen nehmen Werte elementarer Datentypen (Bereiche) an ■ Tupelkalkül: Variablen variieren über Tupelwerte (entsprechend den Zeilen einer Relation) 2. Wende Funktion f auf die durch diese Belegungen gegebenen Werte an. Unter welchen Umständen liefern Kalkülanfragen endliche Ergebnisse? → Sicherheit von Anfragen VL Datenbanken I – 7–41 Bereichskalkül ■ VL Datenbanken I – 7–42 Bereichskalkül II Terme: ■ Konstanten, etwa 42 oder ’MZ-4’. Variablen zu Datentypen, etwa x. Die Datentypangabe erfolgt in der Regel implizit und wird nicht explizit deklariert! ◆ Funktionsanwendung f (t1 , . . . , tn ): Funktion f , Terme ti , etwa plus(12, x) bzw. in Infixnotation 12 + x. ■ Formeln wie üblich mit ∧, ∨, ¬, ∀ und ∃. Atomare Formeln: ■ Anfragen: {x1 , . . . , xn | φ(x1 , . . . , xn )} φ ist Formel über den in der Ergebnisliste aufgeführten Variablen x1 bis xn . Das Ergebnis ist eine Menge von Tupeln. Die Tupelkonstruktion erfolgt implizit aus den Werten der Variablen in der Ergebnisliste. ◆ ◆ ◆ ■ Atomare Formeln (fortg.): ◆ Prädikatanwendung Θ(t1 , . . . , tn ), Θ ∈ {<, >, ≤, ≥, 6=, =, . . . } Datentypprädikat, Terme ti . Zweistellige Prädikate wie üblich in Infix-Notation. Beispiele: x = y , 42 > x oder 3 + 7 = 11. VL Datenbanken I – 7–43 Prädikatanwendungen für Datenbankprädikate, notiert als R(t1 , . . . , tn ) für einen Relationennamen R. Voraussetzung: n muß die Stelligkeit der Relation R sein und alle ti müssen vom passenden Typ sein Beispiel: bestellt(’Maier’, x, 100) VL Datenbanken I – 7–44 Sichere Anfragen Basiskalkül Einschränkung des Bereichskalküls: ■ Wertebereich: ganze Zahlen ■ Datentypprädikate werden wie bei der Relationenalgebra auf Gleichheit und elementare Vergleichsoperatoren eingeschränkt ■ ■ Sichere Anfragen (auch semantisch sichere Anfragen): Anfragen, die für jeden Datenbankzustand σ(R) ein endliches Ergebnis liefern. ■ Beispiel für nicht sichere Anfrage: {x, y | ¬R(x, y)} Funktionsanwendungen sind nicht erlaubt; nur Konstanten dürfen neben Bereichsvariablen als Terme verwendet werden Einfaches Beispiel für sichere Anfrage: {x, y | R(x, y)} VL Datenbanken I – 7–45 Sichere Anfragen II ■ VL Datenbanken I – 7–46 Syntaktisch sichere Anfragen Weiteres Beispiel für sichere Anfrage: ■ Syntaktisch sichere Anfragen: Anfragen, die syntaktischen Einschränkungen unterliegen, um die semantische Sicherheit zu erzwingen. ■ Grundidee: Jede freie Variable xi muß überall in φ(x1 , . . . ) durch positives Auftreten xi = t oder R(. . . , xi , . . . ) an endliche Bereiche gebunden werden. ■ Die Bindung an endliche Bereiche muß für die ganze Bedingung, also insbesondere für alle Zweige einer Disjunktion, gelten. {x, y | y = 10 ∧ x > 0 ∧ x < 10} Sicherheit folgt direkt aus den Regeln der Arithmetik. Semantische Sicherheit ist im allgemeinen nicht entscheidbar ! VL Datenbanken I – 7–47 VL Datenbanken I – 7–48 Relationen für Beispiele Beispiele Bereichskalkül „Alle (Namen von) Kunden in Magdeburg’". Kunde(KName, Adresse, Konto), {x | Kunde(x, y, z) ∧ y =0 MD0 } bestellt(KName, WareBez, Anzahl) ■ Ware(WareBez, Preis, Vorrat) Vereinfachte Notation: Ansonsten ungebundene Variablen (hier y und z ) im Bedingungsteil existentiell mit ∃ gebunden. Vollständige Version: {x | ∃y∃z Kunde(x, y, z) ∧ y =0 MD0 } ■ Einsparung von Bereichsvariablen, indem Konstanten als Parameter des Prädikats eingesetzt werden: {x | Kunde(x,0 MD0 , z)} VL Datenbanken I – 7–49 Beispiele Bereichskalkül II ■ Beispiele Bereichskalkül II Abkürzung für beliebige, unterschiedliche existentiell gebundene Variablen ist _ Symbol: 0 „Städte mit mehr als zwei Kunden’". {y | Kunde(x, y, z) ∧ Kunde(x0 , y, z 0 ) ∧ x 6= x0 } 0 {x | Kunde(x, y, _) ∧ y = MD } ■ VL Datenbanken I – 7–50 Verschiedene Auftreten des Symbols _ stehen hierbei für paarweise verschiedene Variablen. VL Datenbanken I – 7–51 ■ Diese Anfrage zeigt eine Verbundbildung über das zweite Attribut der Kunde-Relation ■ Verbundbildung kann einfach durch die Verwendung der selben Bereichsvariablen als Parameter in verschiedenen Relationsprädikaten erfolgen VL Datenbanken I – 7–52 Beispiele Bereichskalkül III Beispiele Bereichskalkül IV „Wer hat Waren unter 1.- DM bestellt?’" „Wer hat überhaupt etwas bestellt?’" {x | Kunde(x, y, z) ∧ ∃w∃a(bestellt(x, w, a) ∧ a > 0)} {x, w | Kunde(x, y, z) ∧ bestellt(x, w, a) ∧ Ware(w, p, v) ∧ a > 0 ∧ p < 1.00} ■ Verbund über drei Relationen ■ Einsatz einer existentiell gebundenen Unteranfrage ■ derartige Unteranfragen können aufgrund der Regeln der Prädikatenlogik wie folgt aufgelöst werden: {x | Kunde(x, y, z) ∧ (bestellt(x, w, a) ∧ a > 0)} VL Datenbanken I – 7–53 VL Datenbanken I – 7–54 Beispiele Bereichskalkül V Ausdrucksfähigkeit Bereichskalkül „Wer hat nur Waren in großer Anzahl bestellt?’" Bereichskalkül ist streng relational vollständig, d.h. zu jedem Term τ der Relationenalgebra gibt es einen äquivalenten (sicheren) Ausdruck η des Bereichskalküls. {x | Kunde(x, y, z) ∧ ∀w∀a(bestellt(x, w, a) =⇒ a > 100)} ■ universell gebundene Teilformeln können nicht aufgelöst werden VL Datenbanken I – 7–55 VL Datenbanken I – 7–56 Umsetzung von Relationenoperationen Gegeben: zwei Relationenschemata R(A1 , . . . , An ) und S(B1 , . . . , Bm ) ■ Vereinigung (für n = m). R ∪ S ={x ˆ 1 . . . xn | R(x1 , . . . , xn ) ∨ S(x1 , . . . , xn )} ■ Differenz (für n = m). R − S ={x ˆ 1 . . . xn | R(x1 , . . . , xn ) ∧ ¬S(x1 , . . . , xn )} ■ Umsetzung von Relationenoperationen II ■ Projektion. πA (R)={y ˆ 1 . . . yk | ∃x1 . . . ∃xn (R(x1 , . . . , xn ) ∧ y1 = xi1 ∧ · · · ∧ yk = xik )} Hierbei ist die Attributliste der Projektion wie folgt gegeben: A = (Ai1 , . . . , Aik ) ■ Natürlicher Verbund. R ./ S = ˆ {x1 . . . xn xn+1 . . . xn+m−i | R(x1 , . . . , xn ) ∧ S(x1 , . . . , xi , xn+1 , . . . , xn+m−i )} Selektion. σφ (R)={x ˆ 1 . . . xn | R(x1 , . . . , xn ) ∧ φ0 } Die Formel φ0 wird hierbei aus φ gewonnen, indem Variable xi an Stelle der Attributnamen Ai eingesetzt werden. Hierbei seien die ersten i Attribute von R und S die Verbundattribute, also Aj = Bj für j = 1 . . . i. VL Datenbanken I – 7–57 Tupelkalkül ■ VL Datenbanken I – 7–58 Der Basis-Tupelkalkül Anfragen im Tupelkalkül werden analog zu denen des Bereichskalküls aufgebaut, aber mit folgenden Unterschieden: Variablen sind tupelwertig bedeutet „t ist in Relation R“ (alternative Notation: t ∈ R) ◆ t.Ai bzw. t[i] ermöglichen Zugriff auf die i-te Tupelkomponente (alternative Notation: t(i)) ◆ Anfragen haben die Form ◆ ◆ R(t) {t | φ(t)} t Tupelvariable, φ(t) spezielle Formel der Prädikatenlogik 1. Ordnung ■ Atome des Basis-Tupelkalküls: ◆ s∈r mit s Tupelvariable und r Relation mit s1 , s2 Tupelvariablen und A, B Attribute; s1 muß über A und s2 über B definiert sein θ wie in Relationenalgebra: =, 6=, <, >, ≥, ≤ ◆ s.Aθc mit s Tupelvariable, s ist über A definiert, und c ∈ dom(A) (c hat also einen passenden Typ) ◆ s1 .Aθs2 .B {u | φ(u)} wobei u eine Tupelvariable ist. ■ Vereinfachte Notation: Beliebige Terme als Zielfunktion. VL Datenbanken I – 7–59 VL Datenbanken I – 7–60 Der Basis-Tupelkalkül II ■ Erweiterungen in der Notation Formeln des Basis-Tupelkalküls: ◆ Ein Atom ist eine Formel ◆ Sind φ und ψ Formeln, dann sind auch ¬φ, (φ), φ ∧ G und φ ∨ ψ Formeln ◆ Ist φ(s) eine Formel und s eine freie (d.h. noch nicht durch einen Quantor gebundene) Tupelvariable in φ(s), so sind auch ∀s : φ(s) und ∃s : φ(s) Formeln. ■ Implizite Tupelbildung analog zum Bereichskalkül: {u.A1 , v.B2 | R(u) ∧ S(v)} Anfrage ist äquivalent zu: {w | ∃u∃vR(u) ∧ S(v) ∧ u.A1 = w[1] ∧ v.B2 = w[2]} ■ Definition von Attributnamen in der Zielliste und Verwendung von Termen in der Zielliste: {u.Name, Jahresgehalt : u.Gehalt∗13 | Angestellte(u)} VL Datenbanken I – 7–61 Beispiele Tupelkalkül ■ EER-Kalkül Alle Kunden mit Namen ’Mueller’ {t | Kunde(t) ∧ t.KName = ’Mueller’} ■ VL Datenbanken I – 7–62 ■ Anfragen sind Multimengenanfragen: {{· · · | . . .}} ■ Variablen werden positiv an endliche Bereiche gebunden. Bindung an Bereiche in Deklarationen δ i Adressen von Kunden mit Namen ’Mueller’ {{t1 , . . . , tn | δ1 ∧ · · · ∧ δk ∧ φ}} {t.Adresse | Kunde(t) ∧ t.KName = ’Mueller’} ■ Namen und Adressen von Kunden, die Papier bestellt haben {t.KName, t.Adresse | Kunde(t)∧ ∃b(bestellt(b) ∧ b.WName = ’Papier’ ∧t.KName = b.KName)} Beispiel für Deklaration: (a : ANGESTELLTE) ■ Anfragen als Bereiche → rekursiver Anfrageaufbau ■ Aggregatfunktionen wie Summenbildung, Durchschnittswerte, Zählen als Funktionen: AVG({{P reis(b) | (b : BUCH) ∧ Verlag(b) =0 Thomson0 }}) VL Datenbanken I – 7–63 VL Datenbanken I – 7–64 EER-Kalkül II Formelaufbau ■ Vereinigung, Schnittmenge etc. auf Anfragetermen ■ Funktion bts (für bag-to-set): entfernt Duplikate aus Multimengen Anfragen Anfragen ■ Konzepte des EER-Modells → Konstrukte des EER-Kalküls: Formeln Formeln Entity-Typen: Bereiche für Variablen ◆ Beziehungstypen: Prädikatsymbole oder Bereiche ◆ Attribute von Entity-Typen: Funktionen ◆ Atomare Formeln Terme a) Bereichskalkül VL Datenbanken I – 7–65 Änderungsoperationen ■ u(d) := insert t into ri (Ri ) d 7−→ d0 := {r1 , . . . , ri ∪ {t}, . . . , rp } falls d0 ∈ DAT(S) d sonst ■ u(d) := delete t from ri (Ri ) d 7−→ d0 := {r1 , . . . , ri − {t}, . . . , rp } falls d0 ∈ DAT(S) d sonst ■ u(d) := replace t → t0 in ri (Ri ) d 7−→ d0 := {r1 , . . . , (ri − {t}) ∪ {t0 }, . . . , rp } falls d0 ∈ DAT(S) d sonst VL Datenbanken I – 7–67 Atomare Formeln Deklarationen Bereiche Terme b) EER-Kalkül VL Datenbanken I – 7–66