next up previous contents
Next: 2.1.3 Datenspeicherung Up: 2.1 Deduktive Datenbanken Previous: 2.1.1 AnfragenRegeln

2.1.2 Auswertungsstrategien

  Da die Anfragesprache von deduktiven Datenbanken abstrakt ist (im Gegensatz zu SQL, wo der Lösungsweg vorgegeben werden muß), bleiben dem System eine Vielzahl von Optimierungsmöglichkeiten offen. Eine davon ist die Wahl der Auswertungsstrategie. Hierzu gibt es zwei Grundprinzipien (vgl. [Jar91,CGT90,Kem91]):

Während die Vorwärtsauswertung durch Ableitung aller möglichen Fakten das kleinste Herbrand--Modell der Datenbasis berechnet und hieraus die Anfrage befriedigt, arbeitet die Rückwärtsauswertung ProLog--artig. Sie versucht die Anfrage durch Resolution auf abgespeicherte Fakten zu reduzieren.

 

Ein Vorwärtsauswerter berechnet nun als erstes alle herleitbaren `` vorfahr`` und `` vorfahr_in`` Fakten (also unter anderem vorfahr(gertrud,werner), vorfahr(gertrud,hilde), vorfahr(otto,werner), ..., vorfahr(meinold,otto), vorfahr(meinold,lucy), vorfahr(meinold,werner), vorfahr(meinold,hilde), vorfahr(meinold,rudi), vorfahr(meinold,dora) sowie etwa vorfahr_in(gertrud, werner, berlin), ..., vorfahr_in(meinold, werner, berlin), vorfahr_in(meinold, hilde, essen), vorfahr_in(meinold, rudi, frankfurt),...).
Hieraus wird dann die Antwort Y=``werner`` auf die Anfrage gesucht.

Ein Vorteil dieses Verfahrens liegt in der gesicherten Terminination, da irgendwann ein Fixpunkt der Berechnung erreicht wird. Des weiteren lassen sich die von Vorwärtsauswertern durchgeführten Operationen einfach auf Befehle aus der relationalen Algebra abbilden.

Ein Rückwärtsauswerter versucht als erstes das Unterziel wohnt(Y,berlin) zu befriedigen und erhält Y={``gertrud``,``werner``}. Nun versucht er für jeden der beiden zu beweisen, daß sie Vorfahren von meinold sind (die zweite Voraussetzung für vorfahr_in). Dies läßt sich nur bei ``werner`` über vorfahr(meinold,werner):- parent(meinold,otto), vorfahr(otto,werner) zeigen.

Rückwärtsauswertung vermeidet insbesondere die bei der Vorwärtsauswertung durchgeführte Berechnung nicht benötigter Fakten und ist darum meist schneller. Allerdings besteht bei linksrekursiven Regeln die Gefahr von Endlosschleifen.

Mischverfahren (wie z.B. Magic Set) versuchen, die Vorteile beider Verfahren zu kombinieren. So führt Magic Set eine Vorwärtsauswertung durch (und umgeht so Probleme mit unendlicher Rekursion), die durch ein ProLog--artiges Weiterreichen der instanziierten Argumente der Anfrage eingeschränkt wird.



Markus Baumeister
Fri Jun 9 15:38:00 MET DST 1995