290 likes | 415 Views
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken Martin Köhler 1.8.2003. Gliederung. Motivation Verfahren für nicht-rekursive Datenbanken Datenbank ohne Regeln Transaktionen und Regeln
E N D
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken Martin Köhler 1.8.2003
Gliederung • Motivation • Verfahren für nicht-rekursive DatenbankenDatenbank ohne RegelnTransaktionen und Regeln • Verfahren für stratifizierbare DatenbankenÄnderung des DatenbankzustandsIntegritätsüberprüfungEffizenzbetrachtungen • Zusammenfassung
Motivation Warum Integritätsbedingung nicht einfach als Anfrage sehen: • Integritätsbedingungen müssen immer erfüllt sein. • Müssen nach nach jeder Änderung überprüft werden, als Anfrage stellen wäre zu aufwendig. • Anfragen berücksichtigen nicht, das IB vorher erfüllt waren und nur durch die geänderten Fakten geändert werden können.
Verfahren für nicht-rekursive Datenbanken • Algorithmus für nicht-rekursive Datenbanken • Entwickelt aus Prolog Kontext, dass heißt Integritätsbedingungen sind Formeln, die auch Allquantoren enthalten können. • Effiziente Auswertung von Integritäts-bedingungen nach Transaktionen
Verfahren für nicht-rekursive Datenbanken nicht-rekursiv - Erläuterung Eine Datenbank ist nicht-rekursiv, wenn es gibt für kein Fakt p(x) eine Ableitung der Form p(x) p(x) gibt. Es darf für jedes Fakt nur eine endliche Anzahl an Herleitungen geben.
Verfahren für nicht-rekursive Datenbanken Idee: • Forme die Regeln so um, so dass sie effizient von Prolog auszuwerten sind. • Erstelle für jede Integritätsbedingung eine Menge Regeln, die jeweils von einem Literal der Integritätsbedingung abhängen.
Verfahren für nicht-rekursive Datenbanken Ansatz bei Datenbanken ohne Regeln Bei einzelnen Einfügungen: Merke für jede Integritätsbedingung I Regeln folgender Form: insert L only_if r(FL) (Wenn L positiv in I auftaucht) delete L only_if r(FL) (Wenn L negativ I auftaucht)
Verfahren für nicht-rekursive Datenbanken Beispiel Integritätsbedingung: F = X(not employee(X) not worker(X) manager(X) not manger(X) worker(X)) Jeder Angestellte ist entweder ein Manager oder ein Arbeiter. Die sich daraus ergebenden Bedingungen:
Verfahren für nicht-rekursive Datenbanken Beispiel insert employee(X) only_if (not worker(X) manager(X) not manger(X) worker(X)) insert worker(X) only_if (not employee(X) not manager(X)) insert manager(X) only_if (not employee(X) not worker(X)) delete worker(X) only_if (not employee(X) manager(X)) delete manager(X) only_if (not employee(X) worker(X))
Verfahren für nicht-rekursive Datenbanken Integritätsüberprüfung Wenn nun eine einzelne Einfügung oder Löschung kommt: • Durchsuche die Einfüge- (bzw Lösch-) Bedingungen und teste ob sie erfüllt sind. • Dies ist einfach und effizient möglich, da man nur einzelne Regeln auswerten muss.
Verfahren für nicht-rekursive Datenbanken Ansatz bei Transaktionen und Regeln • Berechne neuen Datenbankzustand • Für jedes geänderte Fakt verfahre wie bei einer einzelnen Änderung. (Werte es aber über dem neuen Zustand aus) • Überprüfe aber auch jedes Fakt, das sich neu ableiten lässt bzw nicht mehr ableiten lässt.
Verfahren für nicht-rekursive Datenbanken Algorithmus (1) Gegeben ein Literal L* (Einfügung): Wenn es eine Regel gibt:insert L only_if UC und es gibt eine konsistente Substitution für L bezüglich L*, werte sie aus und überprüfe die Integrität. Beispiel: insert manager(X) only_if (not employee(X) not worker(X)) Neues Literal: manager(Bob) Überprüfe: not employee(X) not worker(X)
Verfahren für nicht-rekursive Datenbanken Algorithmus (2) Gegeben ein Literal L* (Einfügung): Für alle Regeln in denen L positiv auftaucht: P L BBerechne die Substitutionen für P und rufe damit den Algorithmus mit include(P) rekursiv auf. Beispiel: p(x) q(x), r(x). Fakten: q(1). r(1). r(2). Neues Fakt: +q(2)!Rufe den Algorithmus mit +p(2)! auf.
Verfahren für nicht-rekursive Datenbanken Algorithmus (3) Gegeben ein Literal L* (Einfügung): Für alle Regeln in denen L negativ auftaucht:P not L BBerechne die Substitutionen für P und rufe damit den Algorithmus mit remove(P) rekursiv auf. Beispiel: p(x) not q(x), r(x). Fakten: q(1). r(1). r(2). Neues Fakt: +q(2)!Rufe den Algorithmus mit -p(2)! auf.
Verfahren für nicht-rekursive Datenbanken Integritätserhaltung Wenn der Algorithmus eine Integritätsverletzung meldet, dann wird genau das Literal und die Stelle gemeldet, an der die Konsistenz verletzt wird.
Verfahren für nicht-rekursive Datenbanken Zusammenfassung • Der Algorithmus terminiert, wenn die Datenbank nicht rekursiv ist. • Der Algorithmus ist nicht zielgerichtet, sondern wandert die Regeln bottom up durch und materialisiert alle Fakten, die neu sein könnten.
Verfahren für stratifizierbare Datenbanken Idee • Ausgehend von der Änderung der Datenbank, berechne welche Integritätsbedingungen betroffen sind. • Stelle diese Integritätsbedingungen dann als Anfrage.
Verfahren für stratifizierbare Datenbanken Datenbankänderung (1) Wenn für zwei Datenbanken D und D‘ gilt: D D‘, dann kann man Mengen positiver und negativer Änderungen wie folgt definieren. • pos0D,D‘ = {A: A <- W D‘ \ D} (Neue Fakten) • neg0D,D‘ = {}
Verfahren für stratifizierbare Datenbanken Datenbankänderung (2) • posn+1D,D‘ = {A: A W, B taucht positiv in W auf, C posnD,D‘ und ist konsistente Substitution für B und C} +{A: A W, B taucht negativ in W auf, C negnD,D‘ und ist konsistente Substitution für B und C} • negn+1D,D‘ = {A: A W, B taucht positiv in W auf, C negnD,D‘ und ist konsistente Substitution für B und C} +{A: A W, B taucht negativ in W auf, C posnD,D‘ und ist konsistente Substitution für B und C}
Verfahren für stratifizierbare Datenbanken Datenbankänderung (3) • posD,D‘ = posnD,D‘ • negD,D‘ = negnD,D‘ Nun hat man die Menge möglicher neuer Fakten und die Menge möglicher gelöschter Fakten. Diese Definition hat vorausgesetzt das D D‘ gilt, das heißt D‘ enthält alle Fakten aus D. (Bis jetzt also noch keine echte Transaktion mit Löschungen und Einfügungen zusammen)
Verfahren für stratifizierbare Datenbanken Integritätsüberprüfung (1) Teile eine Transaktion wie folgt auf: • Zuerst werden Löschungen ausgeführt, die die Datenbank D nach D‘‘ überführen, danach Einfügungen die D‘‘ nach D‘ überführen. Damit gilt:D‘‘ D‘ und D D‘‘
Verfahren für stratifizierbare Datenbanken Integritätsüberprüfung (2) • Betrache Integritätsbedingungen der Form:W =x1,...xn W‘ • Definiere Mengen konsistenter Substitutionen, die sich auf x1 bis xn beschränken
Verfahren für stratifizierbare Datenbanken Integritätsüberprüfung (3) • = {: ist konsistente Substitution von B positiv in W und C in negD‘‘,D‘ oder ist konsistente Substitution von B negativ in W und C in posD‘‘,D‘} • = {: ist konsistente Substitution von B positiv in W und C in posD‘‘,D oder ist konsistente Substitution von B negativ in W und C in negD‘‘,D}
Verfahren für stratifizierbare Datenbanken Integritätsüberprüfung (4) • Überprüfe nun für alle konsistenten Substitutionen aus ob W‘ erfüllt ist. • Im schlimmsten Fall muss man die ganze Integritätsbedingung als Anfrage stellen, im Idealfall manche Integritätsbedingungen garnicht oder man hat schon Bindungen für manche Variablen.
Verfahren für stratifizierbare Datenbanken Effizienzbetrachtungen (1) • Die Effizienz des Verfahrens hängt davon ab, wie gut man die Menge pos und neg berechnen kann. Dabei gibt es 2 Möglichkeiten.
Verfahren für stratifizierbare Datenbanken Effizienzbetrachtungen (2) • Die Menge bestehen nur aus Kopfliteralen der Regeln, ohne das dort für einzelne Variablen Werte eingesetzt sind. Regeln: p(x) q(x) Fakten: q(1). q(2). Änderung: +q(4)! pos = {q(x), p(x)}neg = {}
Verfahren für stratifizierbare Datenbanken Effizienzbetrachtungen (3) • Man bezieht die Variablenbelegung mit rein. Dies liefert bessere Bindungen für die Variablen und effizientere Anfragen für die Integritätsbedingungen. Regeln: p(x) q(x) Fakten: q(1). q(2). Änderung: +q(4)! pos = {q(4), p(4)}neg = {}
Zusammenfassung • Beide Verfahren sind nicht zielgerichtet, sondern wandern den Abhängigkeits-graphen bottom up durch. • Sie bestimmen mehr Fakten als nötig.
Danke Noch Fragen?