Skip to content

Issadevs/pharmadistrib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PharmaDistrib — Base de données répartie

Établissement : EFREI Module : Base de données répartie Étudiant : Issa KANE Encadrant : Marwa HARZI Année universitaire : 2025-2026 Date de dépôt : 05 avril 2026


Présentation

PharmaDistrib est un projet de base de données répartie conçu pour une entreprise de santé privée opérant sur deux villes : Casablanca (S1) et Rabat (S2). Chaque site regroupe une clinique, une pharmacie partenaire, du personnel médical, des patients, un stock de médicaments, des consultations et des ventes.

L'objectif est de permettre à chaque site de traiter ses opérations quotidiennes localement, tout en offrant une vision consolidée du réseau à l'échelle globale.


Interface web de démonstration

URL de production : https://pharmadistrib-ui.vercel.app

L'interface permet de :

  • vérifier l'état des connexions aux trois bases logiques ;
  • explorer toutes les relations locales et les vues globales ;
  • exécuter les dix requêtes imposées avec leurs paramètres ;
  • lancer des requêtes SQL personnalisées en lecture seule.

La console SQL est volontairement limitée aux commandes SELECT, WITH, SHOW et EXPLAIN. Toute requête d'écriture est refusée.


Architecture

Bases logiques

Identifiant Base PostgreSQL Rôle
S1 pharmadistrib_s1 Site de Casablanca
S2 pharmadistrib_s2 Site de Rabat
Global pharmadistrib_global Schéma global logique (documentaire)

Stratégie retenue

  • Fragmentation horizontale par ville pour les données opérationnelles (patients, médecins, consultations, prescriptions, ventes, stocks).
  • Catalogue médicaments répliqué localement sur S1 et S2 (medicament_ref).
  • Accès distant via l'extension postgres_fdw : chaque site expose des foreign tables vers l'autre site.
  • Vues globales reconstruites par UNION ALL dans le schéma pharma_repartie.
  • Intégrité référentielle distribuée assurée par des triggers de vérification (PostgreSQL ne supporte pas nativement les FK inter-sites).

Schéma global — 9 relations

Patient · Medecin · Medicament
Consultation · Prescription · LignePrescription
Stock · Vente · LigneVente

Structure du dépôt

pharmadistrib/
├── 01_schema_global.sql          Schéma global logique (référence)
├── 02_fragmentation_s1.sql       Fragmentation, FDW, vues globales — site S1
├── 03_fragmentation_s2.sql       Fragmentation, FDW, vues globales — site S2
├── 04_donnees_s1.sql             Jeu de données site Casablanca
├── 05_donnees_s2.sql             Jeu de données site Rabat
├── 06_requetes.sql               Dix requêtes réparties imposées
├── 06_requetes_execution_s1.txt  Résultats d'exécution vérifiés sur S1
├── rapport_bdr.md                Rapport complet du projet
├── server.js                     Serveur Node.js / Express (API + fichiers statiques)
├── vercel.json                   Configuration de déploiement Vercel
├── package.json
└── public/
    ├── index.html                Interface web
    ├── styles.css
    └── app.js

Ordre d'exécution des scripts SQL

Les scripts doivent être exécutés dans l'ordre suivant, en se connectant à la bonne base à chaque étape.

Étape 1 — Schéma global (base documentaire)

-- Se connecter à pharmadistrib_global
\i 01_schema_global.sql

Étape 2 — Fragmentation et configuration FDW

-- Se connecter à pharmadistrib_s1
\i 02_fragmentation_s1.sql

-- Se connecter à pharmadistrib_s2
\i 03_fragmentation_s2.sql

Les scripts 02 et 03 créent l'extension postgres_fdw, les FOREIGN SERVER, les USER MAPPING, les fragments locaux, les foreign tables et les vues globales.

Étape 3 — Chargement des données

-- Se connecter à pharmadistrib_s1
\i 04_donnees_s1.sql

-- Se connecter à pharmadistrib_s2
\i 05_donnees_s2.sql

Étape 4 — Exécution des requêtes

-- Se connecter à pharmadistrib_s1 (ou S2 selon la requête)
\i 06_requetes.sql

Dix requêtes imposées

Objectif Type
1 Patients de Casablanca Locale (S1)
2 Médicaments au prix unitaire maximal Locale (catalogue répliqué)
3 Consultations d'un patient donné avec nom du médecin Répartie
4 Médicaments prescrits pour une consultation donnée Répartie
5 Chiffre d'affaires par ville Répartie
6 Médicament le plus vendu sur le réseau Répartie
7 Stocks sous le seuil d'alerte Répartie
8 Nombre de consultations par médecin Répartie
9 Patients ayant consulté dans une ville et acheté dans l'autre Répartie
10 Patients ayant acheté un médicament figurant dans leur prescription Répartie

Valeurs de contrôle du jeu de données

Après exécution des scripts, les résultats suivants doivent être obtenus :

Indicateur Valeur attendue
Patients réseau 12 (6 Casablanca + 6 Rabat)
Consultations 12
Ventes 15
CA Casablanca 324,00
CA Rabat 409,00
Médicament le plus vendu Paracétamol — 11 unités
Stocks en alerte Métformine (Casa), Énoxaparine (Casa), Ventoline (Rabat)
Patients transvilles (req. 9) Patients 1003 et 2002
Lignes prescription/vente conformes (req. 10) 12 lignes

Exécution locale de l'interface web

Prérequis : Node.js 22, accès aux bases PostgreSQL.

npm install
npm start
# Interface disponible sur http://localhost:3010

Variables d'environnement requises dans .env.local :

DATABASE_URL_S1=postgresql://user:password@host/pharmadistrib_s1
DATABASE_URL_S2=postgresql://user:password@host/pharmadistrib_s2
DATABASE_URL_GLOBAL=postgresql://user:password@host/pharmadistrib_global

Rapport

Le rapport complet est disponible dans le fichier rapport_bdr.md. Il couvre :

  • présentation du besoin et justification de l'architecture répartie ;
  • quatre propositions de fragmentation (2 horizontales, 2 verticales) ;
  • stratégie d'allocation retenue ;
  • description de l'implémentation PostgreSQL ;
  • présentation du jeu de données ;
  • interprétation des dix requêtes ;
  • analyse critique de la solution.

About

Base de données répartie PostgreSQL (Casablanca/Rabat) — fragmentation horizontale, postgres_fdw, vues globales, démo Node/Express

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors