Datalog

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Datalog
Date de première version 1977
Paradigme Langage de requête
Auteur Hervé Gallaire et Jack Minker
modifier Consultez la documentation du modèle

Datalog est un langage de requête et de règles pour les bases de données déductives. Il correspond à un sous ensemble de Prolog. Ses origines remontent aux débuts de la programmation logique.

Syntaxe

Datalog a la syntaxe suivante[1],[2]. On fixe:

  • Un ensemble X {\displaystyle {\mathcal {X}}} , dont les éléments sont appelés variables
  • Un ensemble D {\displaystyle {\mathcal {D}}} , dont les éléments sont appelés constantes
  • Un schéma relationnel S c h {\displaystyle {\mathit {Sch}}} , c'est-à-dire un ensemble fini de prédicats, à chaque prédicat étant associé un entier positif ou nul appelé arité
  • Une partition de ce schéma relationnel en deux sous-schémas, le schéma intensionnel et le schéma extensionnel (les prédicats sont donc soit intensionnels, soit extensionnels)
  • Un prédicat intensionnel distingué [3] B u t {\displaystyle {\mathit {But}}}

Une règle Datalog est une expression de la forme: S ( y ) R 1 ( x 1 ) , , R n ( x n ) {\displaystyle S(\mathbf {y} )\leftarrow R_{1}(\mathbf {x} _{1}),\dots ,R_{n}(\mathbf {x} _{n})} S {\displaystyle S} est un prédicat intensionnel, R 1 R n {\displaystyle R_{1}\dots R_{n}} sont des prédicats intensionnels ou extensionnels, et x 1 x n {\displaystyle \mathbf {x} _{1}\dots \mathbf {x} _{n}} et y {\displaystyle \mathbf {y} } sont des n-uplets d'éléments de X D {\displaystyle {\mathcal {X}}\cup {\mathcal {D}}} , dont l'arité est compatible avec celle des prédicats. S ( y ) {\displaystyle S(\mathbf {y} )} est appelé la tête de la règle, R 1 ( x 1 ) , , R n ( x n ) {\displaystyle R_{1}(\mathbf {x} _{1}),\dots ,R_{n}(\mathbf {x} _{n})} son corps. On impose que chaque variable y Y {\displaystyle y\in {\mathcal {Y}}} apparaissant dans la tête de la règle apparaisse également dans son corps.

Un programme Datalog est un ensemble fini de règles Datalog.

Sémantique

Fixons une instance I 0 {\displaystyle I_{0}} du schéma extensionnel, c'est-à-dire une base de données relationnelle dont les tables sont des instances des prédicats extensionnels. Un programme Datalog P {\displaystyle P} définit une requête sur cette base de données [1],[2], l'arité de cette requête étant l'arité du prédicat B u t {\displaystyle {\mathit {But}}} .

Pour définir cette sémantique, observons tout d'abord que chaque règle r P {\displaystyle r\in P} de la forme S ( y ) R 1 ( x 1 ) , , R n ( x n ) {\displaystyle S(\mathbf {y} )\leftarrow R_{1}(\mathbf {x} _{1}),\dots ,R_{n}(\mathbf {x} _{n})} peut être vue comme une requête sur des instances du schéma relationnel :

r ( I ) := { S ( y ) z 1 z k   R 1 ( x 1 ) I R n ( x n ) I } {\displaystyle r(I):=\{S(\mathbf {y} )\mid \exists z_{1}\dots z_{k}~R_{1}(\mathbf {x_{1}} )\in I\land \dots \land R_{n}(\mathbf {x_{n}} )\in I\}}
{ z 1 z k } {\displaystyle \{z_{1}\dots z_{k}\}} est l'ensemble des variables de X {\displaystyle {\mathcal {X}}} apparaissant dans le corps de la règle r {\displaystyle r} .

Introduisons l'opérateur de conséquence Γ P {\displaystyle \Gamma _{P}} qui transforme une instance du schéma relationnel S c h {\displaystyle {\mathit {Sch}}} en une autre instance de ce même schéma, formée de l'instance initiale et de toutes ses conséquences par chaque règle de P {\displaystyle P}  : Γ P ( I ) := I r P { r ( I ) } {\displaystyle \Gamma _{P}(I):=I\cup \bigcup _{r\in P}\{r(I)\}} . Pour n N {\displaystyle n\in \mathbb {N} } , posons I n + 1 := Γ P ( I n ) {\displaystyle I_{n+1}:=\Gamma _{P}(I_{n})} . Le résultat de l'évaluation de P {\displaystyle P} sur I 0 {\displaystyle I_{0}} , noté P ( I 0 ) {\displaystyle P(I_{0})} , est B u t ( I ) {\displaystyle {\mathit {But}}(I_{\infty })} , où I {\displaystyle I_{\infty }} est le point fixe de la suite ( I n ) n N {\displaystyle (I_{n})_{n\in \mathbb {N} }} . L'existence de ce point fixe est garanti [1],[2] par le fait que Γ P {\displaystyle \Gamma _{P}} est un opérateur croissant, via une application élémentaire du théorème de Knaster-Tarski.

Implémentations

pyDatalog est un module qui ajoute Datalog à la bibliothèque de Python.

De même Datalog est un module pour OCaml.

Notes

  1. a b et c (en) Serge Abiteboul, Richard Hull et Victor Vianu, Foundations of Databases, Addison Wesley, , 685 p. (ISBN 978-0-201-53771-0, lire en ligne)
  2. a b et c Serge Abiteboul, Richard Hull et Victor Vianu, Fondements des bases de données, Vuibert, , 269 p. (ISBN 978-2-7117-8678-7)
  3. (en) Stefano Ceri, Georg Gottlob et Letizia Tanca, « What You Always Wanted to Know About Datalog (And Never Dared to Ask) », IEEE Transactions on Knowledge and Data Engineering, vol. 1, no 1,‎ (ISSN 1041-4347, lire en ligne)

Articles connexes

  • Structured Query Language
  • icône décorative Portail de la programmation informatique
  • icône décorative Portail des bases de données