Projet académique de modélisation et d’implémentation d’une base de données pour la prise de commande en restauration.
- Modèle EA → relationnel (schémas dans
screenshots/) - SQLite : 8 tables, contraintes, trigger de calcul de prix, données d’exemple, 15 requêtes
- MongoDB : migration par exports JSON, pipeline d’agrégation & Map‑Reduce
- Résultat de l’évaluation : 5.5 / 6 (HEPIA, Genève)
Ce repo montre une démarche from‑scratch : modélisation → SQL → NoSQL avec scripts reproductibles.
- Aperçu rapide
- Prérequis
- Démarrage – SQLite
- Démarrage – MongoDB
- Structure du dépôt
- Points techniques clés
- Captures
- Licence & contact
-
Domaine : restaurants, menus, articles, commandes, employés, clients
-
Règles :
- Composition Menu–Article via table associative
MENU_ARTICLEavec attributquantite (≥ 1) - Prix du menu calculé automatiquement (trigger après insert/update/delete sur
MENU_ARTICLE) - Intégrité référentielle activée et cascades sur tables d’association
- Composition Menu–Article via table associative
-
MongoDB : collections isomorphes aux tables, pipeline
$lookup+$group(CA par restaurant) et MapReduce (quantités par article)
- SQLite 3 (CLI) – disponible via Homebrew, APT, choco, etc.
- MongoDB 6+ (serveur +
mongoimport+ shellmongooumongosh) - Bash (pour exécuter les scripts dans
scripts/sous macOS/Linux)
Pour Windows : exécuter les commandes dans Git Bash/WSL ou adapter manuellement.
./scripts/run_sqlite.shCe script :
- crée
restaurant.dbà partir derestaurant.sql; - vérifie la présence des tables et du trigger
maj_prix_menu; - contrôle le chargement des données d’exemple.
Exemple de requête :
-- articles plus chers que la moyenne
SELECT libelle, prix_unitaire
FROM ARTICLE
WHERE prix_unitaire > (SELECT AVG(prix_unitaire) FROM ARTICLE);CI GitHub : un workflow (.github/workflows/sqlite-test.yml) reconstruit la DB et effectue des sanity‑checks lors du push.
Importer toutes les collections JSON :
./scripts/import_mongo.sh
mongo
use restoPipeline d’agrégation (CA par restaurant) : mongo/mongo_pipeline.js
Map‑Reduce (quantités vendues par article) : mongo/mapreduce_articles.js
Les fichiers JSON proviennent d’un export des tables SQLite.
.
├── restaurant.sql # schéma + données + trigger
├── json_mongo/ # exports JSON (8 collections)
├── mongo/
│ ├── mongo_pipeline.js # $lookup + $group (CA par restaurant)
│ └── mapreduce_articles.js # map/reduce -> totaux_articles
├── scripts/
│ ├── run_sqlite.sh # build + sanity checks
│ └── import_mongo.sh # mongoimport en boucle
├── screenshots/
│ ├── EA_restaurant.png # diagramme EA
│ └── MR_restaurant.png # schéma relationnel
└── .github/
└── workflows/
└── sqlite-test.yml # petite CI
- Intégrité :
PRAGMA foreign_keys = ON; FK sur tables d’association enON DELETE CASCADE - Contraintes :
CLIENT.email UNIQUE,MENU_ARTICLE.quantite CHECK (>=1) - Trigger :
maj_prix_menurecalculeMENU.prix_baseà chaque changement de composition - Limites assumées : pas de gestion de stock, d’historique de prix, ni multi‑adresses ; identifiants numériques conservés en MongoDB pour la traçabilité
Si ce projet vous intéresse : tous les retours sont appréciés.

