Contexte
Pistus (abréviation de "Piston Ski") est un événement organisé par WACS (Winter Association CentraleSupélec) chaque année pendant les vacances d'hiver. Il s'agit d'un formidable séjour en montagne de la durée d'une semaine avec au programme de nombreuses activités (ski, snowboard, raclette, fêtes, pour n'en citer que quelques-unes).
Lorsqu'un étudiant souhaite s'inscrire à Pistus, les organisateurs inscrivent dans une feuille de calcul (c'est-à-dire un fichier Excel) les données personnelles de l'étudiant, ainsi que la date et les frais d'inscription. L'étudiant a la possibilité de payer les frais d'inscription immédiatement ou plus tard ; dans tous les cas, l'étudiant doit payer dans les 5 jours suivant l'inscription, sinon l'inscription est considérée comme expirée et elle sera ainsi supprimée. Les organisateurs enverront un un courriel de rappel 2 jours avant la date butoir. Une fois que l'étudiant a payé, les organisateurs inscrivent la date du paiement dans la feuille de calcul.
Les organisateurs conservent deux feuilles de calcul. L'une contient les données d'inscription, à savoir les données personnelles de l'étudiant (matricule, nom et prénom, sexe et adresse électronique), les dates d'inscription et de paiement, les frais d'inscription et l'année de l'événement. L'autre fichier Excel contient des informations sur les membres de l'association.
Dans ces fichiers, seules les associations existent dans le monde réel. Les noms des élèves ont été générés aléatoirement à partir d'une liste de noms et de prénoms français. Ces fichiers ne contiennent aucune référence à des élèves réels de l'école.
Cette organisation pose de nombreux problèmes :
- Si les étudiants participent à plusieurs éditions de Pistus au cours de différentes années, leurs données sont réécrites à chaque inscription. Cela peut conduire à des incohérences. Par exemple, si un étudiant change d'adresse électronique, les organisateurs doivent supprimer toutes les références à son ancienne adresse dans les feuilles de calcul ; ces modifications manuelles ont peu de chances d'être précises.
- Les organisateurs doivent vérifier manuellement si un étudiant respecte la date limite de paiement.
- Les organisateurs doivent envoyer manuellement des courriels de rappel aux étudiants.
C'est pourquoi nous voulons développer un logiciel, appelé PistusResa
, que les organisateurs peuvent utiliser pour gérer les inscriptions de manière efficace.
L'architecture de PistusResa
est présentée dans la figure suivante.

L'architecture de
PistusResa
L'application présente une interface graphique (GUI) permettant d'accéder à toutes ses fonctionnalités. Le backend (c'est-à-dire la partie du logiciel qui n'est pas visible par un utilisateur) se compose de cinq modules, chacun implémentant une fonctionnalité spécifique :
- Le module Student permet à un organisateur de gérer les données personnelles des étudiants.
- Le module Registration permet à un organisateur de gérer les inscriptions aux éditions de Pistus.
- Le module Authentication fournit les fonctionnalités pour restreindre l'utilisation de
PistusResa
aux utilisateurs autorisés. - Le module Deadline est un processus qui s'exécute en arrière-plan et qui gère les échéances de paiement. Ses deux principales fonctionnalités sont : l'envoi d'un courriel de rappel deux jours avant la date limite pour les inscriptions non payées, et la suppression des inscriptions expirées.
PistusResa
utilise une base de données relationnelle pour stocker toutes ses données.
Deux modules supplémentaires sont utilisés pour créer la base de données et y importer les données.
- Le module db est utilisé pour créer la base de données et ses tables.
- Le module ETL (Extract, Transform, Load) est utilisé pour importer dans la base les données sur les éditions passées du Pistus qui sont conservées dans les deux feuilles de calcul mentionnées ci-dessus.
Activités de ce TD
- Créer le modèle conceptuel de la base de données relationnelle
PistusResa
. - Dériver le modèle logique de la base de données relationnelle
PistusResa
. - Apprendre à utiliser le module Python
sqlite3
. - Créer la base de données pour
PistusResa
.
La modélisation de données est abordée dans le chapitre 5 du polycopié.
Pour une introduction rapide cliquez ici.
Modèle conceptuel de la base de données
La base de données stocke les informations relatives aux étudiants qui s'inscrivent à Pistus.
Les étudiants sont identifiés par un matricule, et ont un prénom et un nom de famille, un sexe et une adresse électronique (un étudiant peut en avoir plusieurs).
Un étudiant peut faire partie d'une ou plusieurs associations ; chaque association a un nom et une description textuelle de ses activités. Deux associations ne peuvent pas avoir le même nom. Tout étudiant a un rôle spécifique dans une association (par exemple, président, secrétaire, membre).
Lorsqu'un étudiant s'inscrit à Pistus, on enregistre l'année de l'événement, la date et les frais d'inscription et la date de paiement. La date d'inscription et la date de paiement peuvent être différentes. Il est important de noter qu'un étudiant peut participer à différentes éditions de Pistus, mais qu'il ne peut pas s'inscrire deux fois à la même édition.
Seuls des personnes autorisées peuvent utiliser l'application PistusResa
pour accéder aux données et les modifier. Ces personnes autorisées disposent d'un nom utilisateur (différent pour chaque personne) et d'un mot de passe. Les noms utilisateur et les mots de passe sont également stockés dans la base de données.
Concevez un modèle conceptuel de cette base de données. Dessinez le modèle conceptuel avec un diagramme entité-association (EA).
Modèle logique de la base de données
A partir du modèle conceptuel, vous pouvez dériver un modèle logique, c'est-à-dire les tables de la base de données.
👉 Pour en savoir plus sur les modèles logiques cliquez ici.
Créez le modèle logique correspondant au modèle conceptuel que vous avez conçu. Pour chaque table, indiquez son nom, les noms des colonnes (sans les types), les clés primaires et étrangères.
ANSWER ELEMENTS
Le modèle conceptuel que nous utilisons comme référence est montré dans cette figure.
student (stud_number, first_name, last_name, gender) emailAddress (email, stud_number) association (asso_name, asso_desc) membership (stud_number, asso_name, stud_role) pistusEdition (year, registration_fee) registration (stud_number, year, registration_date, payment_date) login (username, password)
Clés étrangères
emailAddress(stud_number)
referencesstudent(stud_number)
membership(stud_number)
referencesstudent(stud_number)
membership(asso_name)
referencesassociation(asso_name)
registration(stud_number)
referencesstudent(stud_number)
,registration(year)
referencespistusEdition(year)
Le module sqlite3
PistusResa
utilise SQLite comme système de gestion de base de données relationnelle (SGBDR).
Toute application communique avec un SGBD en utilisant des fonctions définies dans une interface de programmation d'application (en anglais, Application Programming Interface, ou API). Les fonctions Python utilisées pour communiquer avec n'importe quel SGBDR sont définies dans l'API PEP 249 API.
L'API PEP 249 ne fait que définir les fonctions. En d'autres termes, l'API spécifie pour chaque fonction :
- son nom : il sera utilisé par les applications pour invoquer la fonction.
- sa signature : les paramètres de la fonction et leurs types, éventuellement une valeur de retour et son type.
- son but : ce que la fonction est censée faire.
L'API ne spécifie pas l'implémentation de la fonction, c'est-à-dire la manière dont la fonction réalise le comportement attendu.
Chaque SGBDR offre une implémentation différente de l'API PEP 249. L'implémentation de l'API PEP 249 pour SQLite est le module sqlite3
.
Téléchargez le notebook disponible à ce lien et importez-le dans Visual Studio Code. Vous y trouverez la suite du TD.
ANSWER ELEMENTS
Le notebook avec les solutions est disponible à ce lien.
Prochain TD
Dans le prochain TD, nous allons :
- extraire les données
PistusResa
des fichiers CSV pour les mettre dans des dataframes Pandas ; - transformer les données en utilisant les fonctions définies dans Pandas ;
- charger les données des dataframes Pandas dans la base de données relationnelle de
PistusResa
.
Conservez votre fichier pistus.db
, vous en aurez besoin dans le prochain TD !
Si vous avez atteint la fin de ce TD, et qu'il vous reste du temps, vous pouvez commencer le prochain TD.