Datalog ist eine deklarative Logikprogrammiersprache, die Ende der 1970er-Jahre als Abfragesprache für deduktive Datenbanken entstand. Sie ist syntaktisch eine Teilmenge von Prolog, verwendet aber ein anderes Auswertungsmodell: Datalog arbeitet bottom-up (von den Fakten zu den abgeleiteten Aussagen) und garantiert Terminierung, weil Rekursion auf monotone Mengen beschränkt ist.
Programmstruktur: Fakten, Regeln, Abfragen
% Fakten (Extension)
elternteil(anna, ben).
elternteil(ben, carla).
% Regeln (Intension)
vorfahre(X, Y) :- elternteil(X, Y).
vorfahre(X, Z) :- elternteil(X, Y), vorfahre(Y, Z).
% Abfrage
vorfahre(anna, X)?
Ein Datalog-Programm besteht aus Fakten (grundlegende Beziehungen), Regeln mit Horn-Klauseln (Kopf :- Rumpf) und Abfragen. Das Beispiel berechnet den transitiven Abschluss der Elternbeziehung — ein klassisches Muster, das in SQL erst über rekursive Common Table Expressions möglich ist.
Werkzeuge
souffle program.dl # Soufflé: Datalog zu nativem C++ kompilieren
souffle program.dl -F fakten/ -D ergebnis/ # Fakten-Eingabe, Ausgabe-Verzeichnis
python3 -m pip install pyDatalog # pyDatalog: Datalog in Python
Soufflé ist die bekannteste moderne Implementierung: Es übersetzt Datalog in paralleles C++ und wird vor allem in der statischen Analyse eingesetzt (z. B. Points-to-Analyse für Java). pyDatalog bringt die Logikprogrammierung nach Python, Datalog-basierte Regeln stecken außerdem in Datenbank-Erweiterungen wie dem LogicBlox-System und in Analyseverfahren vieler Compiler.
Eigenschaften
- Negation ist nur in stratifizierter Form erlaubt (keine Negation in Rekursionszyklen), damit das Ergebnis eindeutig bleibt.
- Die Trennung in Extension (EDB: Fakten) und Intension (IDB: Regeln) erinnert an Views über Basistabellen.
- Datalog ist deterministisch und terminierend — anders als Prolog gibt es keine Suchreihenfolge und kein Backtracking.
Verwandte Themen: Prolog-Befehle zeigen die Top-down-Variante der Logikprogrammierung, SQL-Befehle die klassische Datenbankabfrage, Python-Befehle die Einbindung über pyDatalog. In der Welt der deklarativen Datenverarbeitung ergänzt jq die JSON-Seite: Dort fragt man Datenstrukturen deklarativ ab, Datalog fragt Faktenmengen ab.