Projet TER (Travail d'Étude et de Recherche) Master 1 Informatique - DataScale | Université Paris-Saclay
Auteurs : Paria Rahmatpanah & Emmy Marie-Joseph
L'objectif principal du projet ELISE est de créer un cadre formel et visuel capable de rendre explicite la logique des requêtes SQL complexes.
Contrairement aux approches classiques qui se contentent d'évaluer si une condition est vraie ou fausse, ELISE s'appuie sur la théorie des bases de données canoniques et introduit une stratification par identité. Le but est de générer des tuples intermédiaires compréhensibles pour l'apprenant, en montrant visuellement comment les contraintes lient les variables entre elles.
Ce projet est développé en Python. Pour faire tourner le prototype, vous avez besoin d'installer la librairie d'analyse SQL sqlglot et flask.
# Installer les dépendances
pip install sqlglot flaskPour lancer l'interface visuelle ELISE :
python main.pyOuvrez ensuite votre navigateur et accédez à l'adresse : http://127.0.0.1:5000
- Exclusion :
SELECT idf
FROM Film
WHERE idf NOT IN (
SELECT idf
FROM FilmGenre
WHERE genre = 'comedie'
)- Universelle :
SELECT S.sname
FROM Sailor S
WHERE NOT EXISTS (
SELECT B.bid
FROM Boat B
WHERE NOT EXISTS (
SELECT R.bid
FROM Reserves R
WHERE R.sid = S.sid AND R.bid = B.bid
)
)- Intersection :
SELECT course_id FROM section WHERE semester = 'Fall' AND year = 2017
INTERSECT
SELECT course_id FROM section WHERE semester = 'Spring' AND year = 2018;- Requête SFW utilisant une auto-jointure :
SELECT L1.course_id FROM Section L1, Section L2
WHERE L1.course_id = L2.course_id
AND L1.semester = 'Fall'
AND L1.year = 2017
AND L2.semester = 'Spring'
AND L2.year = 2018ELISE générera exactement le même IR Document et le même tableau canonique, prouvant l'équivalence logique des deux écritures.
Le projet respecte l'architecture standard d'une application web Flask, séparant clairement la logique de traitement syntaxique (Backend) du rendu visuel (Frontend).
TER/
├── main.py # Point d'entrée du serveur Flask et API
├── core/ # Logique métier (Backend)
│ └── ast_extractor.py # Moteur d'extraction : parse le SQL (via sqlglot) et génère l'IR Document
├── static/ # Fichiers statiques (Frontend)
│ ├── css/
│ │ └── style.css # Styles visuels (Design des tableaux, couleurs)
│ └── js/
│ └── app.js # Logique client : requêtes API, algorithme Union-Find et rendu du DOM
└── templates/ # Vues HTML
└── visualiser.html # Squelette de l'interface web servi par Flask
- Concepts basés sur les recherches de N. Preda et L. Jachiet.
- Principes de bases de données canoniques, d'équivalence sémantique et de stratification de l'identité.