Conception de base de données d'un établissement d'éducation supérieure

Département Génie Mathématique

Projet de : Rand ASSWAD

A l'attention de : Mme. Nathalie Chaignaud

Présenté le : 29 mai 2018

Introduction

Le projet en quelques mots

Le système d’éducation supérieure dans le monde a beaucoup évolué dans les dernières décennies à cause de plusieurs facteurs, notamment l’ouverture à l’international et les développements en technologie.

Dans le monde d’aujourd’hui, les établissements d’enseignement supérieur s’ouvrent de plus en plus à d’autres pays à travers des programmes d’échanges académiques et des projets en collaboration.

De plus, la technologie est de plus en plus présente dans l’éducation. Grâce à Internet, ils existent aujourd’hui des opportunités d’éducation en ligne, ce qui a donné naissance à des plateformes d’enseignement offrant des programmes diplômant.

Par conséquent, il a fallu développer des systèmes communs d’évaluation de compétences académiques. La solution adoptée par la majorités des établissements d’enseignement supérieur est le crédit académique qui est une unité de mesure de compétences obtenues liée au nombres d’heures passées pour acquérir ces compétences.

Ce système a permit les écoles et les universités de donner plus de libertés aux étudiants dans leurs parcours académiques.

Bien que ce système soit plus libre et démocratique, il est certainement plus complexe à mettre en place et nécessite un modèle bien défini.

Ce projet vise donc à modéliser une base de données relationnelles pour un établissement d’éducation supérieur libre, la base de données conçue est utilisable par un établissement scolaire réel ou une plateforme d’éducation complète. Ce modèle n’existe pas encore, mais s’inspire beaucoup du système existant adopté dans beaucoup de pays.

Le modèle de l’établissement

La philosophie principale de l’établissement est la liberté de l’éducation; dans le sens où les étudiants ont la possibilité de choisir leurs matières en toute liberté. L’établissement offre des formations en domaines différents (sciences de la nature et sciences sociales/humaines). La question qui se pose donc : comment obtenir un diplôme?

Les règles suivantes répondent à cette question :

  • L’année est divisée en trois trimestres : l’automne (AUT), le printemps (PRN), et l’été (ETE). Il est possible de commencer ou terminer ses études n’importe quel trimestre.
  • Chaque matière est associée à un certain nombre de crédits lié à la quantité de cours et de travail nécessaires pour la valider.
  • Un diplôme est obtenu lors de la validation d’un certain nombre crédits divisés en deux catégories : crédits essentiels et crédits complémentaires.
    • Crédits essentiels : Crédits à obtenir en validant des matières associées à ce programme. On dira que ces matières appartiennent à ce programme. Une matière peut appartenir à plusieurs programmes. L’étudiant n’est pas obligé de valider toutes les matières qui appartiennent à un programme pour obtenir le diplôme, il suffit d’obtenir le nombre minimum de crédits essentiels par ces matières.
    • Crédits complémentaires : Ce sont des crédits d’enrichissement personnel. Les étudiants obtiendront ces crédits en validant des matières de leurs choix (hors programme).
  • Il n’y a pas de contraintes sur le nombre de crédits/matières qu’un(e) étudiant(e) obtient en un trimestre.
  • Un(e) étudiant(e) peut suivre plusieurs programmes diplômants à la fois (ou aucun).
  • Les étudiants ont la liberté de viser un ou plusieurs diplômes ou de juste suivre des matières pour s’enrichir.
  • L’existence d’un quota pour chaque matière entraine une critère de selection des étudiants, cette critère est détérminée par plusieurs facteurs:
    • Les étudiants qui visent des diplômes contenant tel matière sont prioritaires.
    • Le nombre de fois qu’un(e) étudiant(e) ait suivi la matière antérieurement est un facteur négatif.
    • L’avis du conseiller est un facteur très important.
  • Le choix de viser un diplôme est analogue au projet professionnel, il est donc dynamique et évolue au cours des trimestres. On donne alors aux étudiants la possibilité de changer de diplômes pendant la première année à chaque fin de trimestre, il est aussi possible de changer de diplôme plus tard sous-reserve d’avoir au moins 50% de matières communs déjà validées.
  • Certaines matières demandes la prédisposition de certaines notions exprimées en fonction d’autres matières dites les prérequises de la matière. Les matières sans prérequis sont dites des matières élémentaires.
  • Afin de garder le niveau académique de l’établissement les matières sont catégorisées par domaines avec le poste du responsable académique qui veille sur le bon déroulement des matières de ce domaine. Il se peut que le responsable soient des enseignants.

Conception

Modèle Entité/Association

Modèle Entité/Association

Modèle Entité/Association

Trimestre : Cette entité correspond à une période scolaire identifiée par une clé composée de 2 attributs : année + période. La période est l’une des trois : l’automne, le prinstemps ou l’été, il est possible d’associer une valeur numérique où un code à chaque période afin de minimiser la taille de stockage. Un trimestre est décrit par sa date de début et sa date de fin.

Cours : L’entité cours représente une instance concrète d’une Matière. Elle est identifié par la clé unique idCours et contient les attributs quota et dateExamen.

Professeur : Un professeur a un identifiant unique (idProfesseur) et ses informations de contact en tant qu’attributs.

Domaine : Un domaine est identifié par son nom car il est forcément unique (logiquement, si les domaines sont bien appelés ils portent des noms distinctes).

Matière : L’entité Matière a un identifiant unique et un certain nombre de crédits.

Diplôme : Un diplôme est identifié par la clé idDiplome et est caractérisé par les attributs titreDiplome, creditsEssentiels, et creditsEnrichissement.

Etudiant : Identifié par la clé idEtudiant et caractérisé par ses information de contact.

Conseiller : Identifié par la clé idConseiller et caractérisé par ses information de contact.

Les relations entre les entités

Relations binaires

Se dérouler pendant : Un cours se déroule pendant un trimestre définitivement, plusieurs cours se déroule pendant un trimestre.

Enseigner : Un cours est enseigné par un professeur, un professeur peut enseigné plusieurs cours. Il est possible qu’un professeur n’enseigne pas des cours s’il est responsable académique.

Spécialiser : Un professeur est spécialisé dans un ou plusieurs domaines, dans un domaine spécifique il y a un ou plusieurs professeurs spécialisés.

Être responsable : Un professeur peut être le responsable académique dans un de ces domaines de spécialité, le domaine a un professeur comme responsable académique.

Appartenir : Une matière appartient a un domaine académique, et un domaine contient au moins une matière.

Prérequire : Une matière peut avoir une ou plusieurs matières prérequises, et une matière peut être prérequise par une ou plusieure matières.

Être instance de : Un cours est une instance d’une maitère sur un trimestre, une matière peut être instanciée plusieurs par plusieurs cours.

Suivre : Un étudiant suit un ou plusieurs cours et obtient une note dans chaque cours. Un cours peut être est suivi par un ou plusieurs étudiants.

Se préinscrire : Un ou plusieurs étudiants se pré-inscrivent dans un cours, et en fonction d’une note de priorité en respectant le quota du cours un ou plusieurs étudiants suivent le cours. La liste de pré-inscrits peut contenir un ou plusieurs étudiants, s’il n’y a pas de pré-inscrits le cours ne s’ouvre pas.

Donner conseils : Un conseiller donne des conseils à un ou plusieurs étudiants concernant leur choix des matières, chaque étudiant est prend des conseils d’un conseiller.

Relation ternaire

Préparer :

  • Une matière appartient à un ou plusieurs ou aucun programme diplômant, et un programme contient une ou plusieurs matière. (Dans le sens défini en Section 1.2)
  • Un étudiant prépare un ou plusieurs ou aucun diplôme, un diplôme peut être préparé par un ou plusieurs étudiants.
  • Un étudiant prépare une ou plusieurs matières, et une matière est préparé par un ou plusieurs ou aucun étudiant.

Schéma relationnel

On passe aux schéma relationnel à partir de notre modèle Entité/Association.

Entités

  • Trimestre(année, periode, dateDebut, dateFin)
  • Cours(idCours, quota, dateExamen)
  • Professeur(idProfesseur, nomProf, prenomProf, adresseProf, emailProf)
  • Domaine(nomDomaine)
  • Matière(codeMatière, crédits)
  • Etudiant(idEtudiant, nomEtudiant, prenomEtudiant, adresseEtudiant, emailEtudiant)
  • Conseiller(idConseiller, nomConseiller, prenomConseiller, adresseConseiller, emailConseiller)
  • Diplome(idDiplome, titreDiplome, creditsEssentiels, creditsEnrichissement)

Associations

Associations binaires 1..n

  • Cours(idCours, quota, dateExamen, codeMatiere, annee, periode, idProfesseur)
  • Domaine(nomDomaine, idProfRespo)
  • Matiere(codeMatiere, crédits, nomDomaine)
  • Etudiant(idEtudiant, nomEtudiant, prenomEtudiant, adresseEtudiant, emailEtudiant, idConseiller)

Associations binaires n..n

  • Specialiser(idProfesseur, nomDomaine)
  • Prerequire(codeMatiere, codePrerequise)
  • SePreinscrire(idCours, idEtudiant)
  • Suivre(idCours, idEtudiant)

Association ternaire

  • Preparer(idEtudiant, codeMatiere, Diplome)

Dénormalisation

  • La relation Trimestre peut être supprimée en la déplaçant vers la relation Cours car elle porte peu d’attributs et elle résulte d’une entité faible.
  • La relation Domaine peut être supprimée facilement en la déplaçant vers les relations Professeur et Cours.

On est tempté de supprimer la relation Conseiller car elle est une entité faible et n’est reliée qu’à l’entité Etudiant. Néanmoins, il est très important d’avoir un tableau existant dans la base de donnée pour les personnes (Etudiants, Professeurs, Conseillers) sans avoir à faire des requêtes pour obtenir tel liste, je fais donc le choix de garder cette relation.

Modification sur le pré-rapport

Quand j’ai commencé la deuxième partie du projet, j’ai reconsidéré les choix que j’avais effectué, j’expliquerais brièvement les changements que j’ai effectué:

  • Dans la dénormalisation, j’avais supprimé la relation Matiere car elle est instanciée par la relation Cours, finalement j’ai préféré la garder afin de distinguer ces deux relations et de rendre les tableaux plus lisibles.
  • Pour simplifier, j’ai renommé les entités qui portent des noms comme prenomConseiller en prenom.
  • J’ai fusionné les deux relations Préinscription et Suivre dans la relation InscriptionCours qui fait l’affaire.
  • J’ai remplacé l’association ternaire par deux associations binaires plus simples, car on n’utilise jamais les deux relations dans la même requête. En effet, la relation ternaire était un peu forcée.

Schéma relationnel final

  • Cours(code, matiere, quota, quotaExamen, dateDebut, dateExamen, enseignant, annee, periode)
  • Professeur(id, nom, prenom, adresse, email, dateNaissance)
  • Etudiant(id, nom, prenom, adresse, email, dateNaissance, idConseiller)
  • Conseiller(id, nom, prenom, adresse, email, dateNaissance)
  • Diplome(id, titre, niveau, creditsEssentiels, creditsEnrichissement)
  • PreRequisition(matiere, matiereRequise)
  • InscriptionCours(cours, etudiant, suivreCours, inscrit, noteConseiller, noteObtenue)
  • Preparer(etudiant, diplome)
  • Contenir(diplome, matiere)
Schéma Relationnel

Schéma Relationnel

Implémentation

Environnement

Pour des raisons de portabilité, j’ai sauvegardé les scripts SQL permettant de créer la base de donnée, et la populer par les tableau, des données aléatoires pour tester et les requêtes dans ce rapport (repertoire: db).

Pour faciliter la connection, j’ai créé des scripts shell qui lancent les requêtes SQL à partir du terminal (repertoire: bin).

Les tableaux dans ce rapport sont compilé en directe à l’aide des libraries R knitr et DBI.

Le code source du projet y compris ce rapport est disponible sur: github.com/rand-asswad/gm4_bdd_univ

Cette section est plus visible en format HTML: rand-asswad.github.io/gm4_bdd_univ/rapport/index.html

Connection à la base de données:

library(DBI)
univ <- dbConnect(RMariaDB::MariaDB(), dbname="univ", username="root")

Les requêtes

Les vues

Les tableaux de la base de données permettent d’obtenir toutes les informations nécessaires par des requêtes, il n’y a donc aucun besoin de d’avoir d’autres tableaux. En revanche, il est certainement pratique d’avoir des vues qu’on utilisera souvent dans nos requêtes, par exemple une liste des matières validés (par étudiant).

DROP VIEW IF EXISTS Valide;
CREATE VIEW Valide AS
  SELECT Etudiant.id as etudiant, Cours.matiere
  FROM InscriptionCours
  INNER JOIN Cours ON InscriptionCours.cours = Cours.code
  INNER JOIN Etudiant ON InscriptionCours.etudiant = Etudiant.id
  WHERE noteObtenue >= 10;

En rajoutant quelques colonnes à cette vue, on obtient:

SELECT Etudiant.nom, Etudiant.prenom, Matiere.code, Matiere.nom, Matiere.credits
FROM Valide
INNER JOIN Etudiant ON Valide.etudiant = Etudiant.id
INNER JOIN Matiere ON Valide.matiere = Matiere.code
Displaying records 1 - 10
nom prenom code nom..4 credits
Jacquet Anaëlle Comb2 Optimisation combinatoire 4
Jacquet Anaëlle Elec0 Electromagnétisme et courant alternatif 2
Jacquet Anaëlle EnB22 Anglais niveau B2.2 1
Jacquet Anaëlle LinAlg2 Algèbre Linéaire – approfondissement 3
Jacquet Anaëlle Mesure0 Théorie des ensembles 1
Jacquet Anaëlle Proba0 Initiation à la probablité (discrète) 1
Jacquet Anaëlle Techno1 Systèmes d’exploitations, logiciels (culture générale) 1
Jacquet Anaëlle Thermo1 Modèles thermodynamiques 2
Jacquet Anaëlle Ana0 Analyse (suites et fonctions de variables réelles en dimension 1) 1
Jacquet Anaëlle Complex1 Analyse complexe 3

Voici une vue de diplômes et le nombre de matières qu’elles contiennent.

DROP View IF EXISTS matieresDiplome;
CREATE VIEW matieresDiplome AS
  SELECT Diplome.id, COUNT(*) AS nbMatieres 
  FROM Contenir
  INNER JOIN Diplome on Contenir.diplome = Diplome.id
  GROUP BY Contenir.diplome;

Afin de mieux visualiser cette vue, on rajoutes quelques colonnes du tableau Diplome.

SELECT Diplome.titre, Diplome.niveau, matieresDiplome.nbMatieres, Diplome.creditsEssentiels
FROM matieresDiplome
INNER JOIN Diplome ON matieresDiplome.id = Diplome.id;
Displaying records 1 - 10
titre niveau nbMatieres creditsEssentiels
Mathématiques fondamentales et appliquées BSc 56 150
Mathématiques et sciences de données BSc 57 150
Informatique BSc 57 150
Ingénierie de logiciel BSc 59 150
Mathématiques et sciences de données BSc 59 150
Physiques appliquées BSc 58 150
Génie éléctronique BEng 57 150
Génie énergétique BEng 55 150
Génie généraliste BEng 58 150
Analyse de signal MEng 41 105

Les séléctions

Les séléctions sont spécifiques à une ligne d’un tableau, donc dans le code source j’ai créé des procédures qui prennent la clé primaire en entrée pour effectuer ces requêtes.

Dans ce rapport, j’ai testé avec les valeurs suivantes:

idEtudiant <- 1
idDiplome <- 5
domaine <- "Combinatoires"
codeCours <- "AUT18Ana01"

On séléctionnent les matières qu’un étudiant pourra prendre. C’est-à-dire, les matières que l’étudiant n’a pas encore validées et il/elle a déjà validé ses matières requises.

SELECT Matiere.code, Matiere.nom, Matiere.credits
FROM Matiere
INNER JOIN PreRequisition ON Matiere.code = PreRequisition.matiere
WHERE Matiere.code NOT IN (SELECT matiere
                           FROM Valide
                           WHERE Valide.etudiant = ?idEtudiant)
AND PreRequisition.matiereRequise = ANY (SELECT matiere
                                         FROM Valide
                                         WHERE Valide.etudiant = ?idEtudiant);
Displaying records 1 - 10
code nom credits
Ana1 Analyse (suites et fonctions de variables réelles en dimension n) 2
Complex2 Analyse complexe – approfondissement 4
Data3 Big data – avancé 4
DevWeb0 Créations de sites pour les non informaticiens 1
Elec1 Electromagnétisme avancé 3
Fluid2 Turbulances, dyphasique, etc 4
Fourier1 La famille de transformations de fourier 3
Fourier2 Approfondissement dans l’analyse de fourier 4
Meca0 Physique Newtonienne (base de mécanique du point + applications) 1
Mesure1 Théorie de la mesure 3

On séléctionnent les cours qu’un étudiant peut prendre pendant l’année courante.

SELECT Cours.code, Cours.matiere, Matiere.nom, Matiere.credits, Cours.trimestre, Cours.enseignant
FROM Cours
INNER JOIN Matiere ON Cours.matiere = Matiere.code
INNER JOIN PreRequisition ON Cours.matiere = PreRequisition.matiere
WHERE Matiere.code NOT IN (SELECT matiere
                           FROM Valide
                           WHERE Valide.etudiant = ?idEtudiant)
AND PreRequisition.matiereRequise = ANY (SELECT matiere
                                         FROM Valide
                                         WHERE Valide.etudiant = ?idEtudiant)
AND Cours.annee = Year(curdate());
Displaying records 1 - 10
code matiere nom credits trimestre enseignant
ETE18Elec11 Elec1 Electromagnétisme avancé 3 ETE 43
PRN18Optique11 Optique1 Optique ondulatoires 3 PRN 55
AUT18Fourier21 Fourier2 Approfondissement dans l’analyse de fourier 4 AUT 24
ETE18Fourier21 Fourier2 Approfondissement dans l’analyse de fourier 4 ETE 24
AUT18Mesure11 Mesure1 Théorie de la mesure 3 AUT 13
PRN18Mesure11 Mesure1 Théorie de la mesure 3 PRN 13
AUT18Topo01 Topo0 Initiation à la topologie (générale et algébrique) 2 AUT 10
ETE18Topo01 Topo0 Initiation à la topologie (générale et algébrique) 2 ETE 10
PRN18Topo01 Topo0 Initiation à la topologie (générale et algébrique) 2 PRN 10
AUT18Proba11 Proba1 Probabilité discrète et continue, var aléatoires, loi des grandes nombres 2 AUT 12

Compter le nombre de matières validées par diplômes pour un étudiant, et les afficher dans l’ordre décroissant.

SELECT Diplome.titre, Diplome.niveau, COUNT(1) as nbValide,
    matieresDiplome.nbMatieres as nbTotal
FROM Contenir
INNER JOIN Diplome ON Contenir.diplome = Diplome.id
INNER JOIN Matiere ON Contenir.matiere = Matiere.code
INNER JOIN Valide ON Matiere.code = Valide.matiere
INNER JOIN matieresDiplome ON Diplome.id = matieresDiplome.id
WHERE Valide.etudiant = ?idEtudiant
GROUP BY Contenir.diplome
ORDER BY nbValide DESC;
Displaying records 1 - 10
titre niveau nbValide nbTotal
Génie généraliste BEng 18 58
Technicien en informatique Tech 17 39
Mathématiques et sciences de données BSc 16 59
Génie de modélisation et calculs MEng 13 41
Mathématiques fondamentales et appliquées BSc 13 56
Mathématiques fondamentales et appliquées MSc 13 42
Génie éléctronique BEng 12 57
Mathématiques et sciences de données BSc 12 57
Analyse de signal MEng 12 41
Informatique BSc 11 57

Compter le nombre matières restant pour un étudiant afin de valider un diplôme.

SELECT Matiere.code, Matiere.nom, Matiere.credits
FROM Contenir
INNER JOIN Matiere ON Contenir.matiere = Matiere.code
WHERE Matiere.code NOT IN (SELECT Valide.matiere
                           FROM Valide
                           WHERE Valide.etudiant = ?idEtudiant)
AND Contenir.diplome = ?idDiplome;
Displaying records 1 - 10
code nom credits
Ana1 Analyse (suites et fonctions de variables réelles en dimension n) 2
Ana2 Equation différentielles ordinaires 3
Comb1 Combinatoires avancées 3
Comp0 Automates, langages, regex 4
Comp1 Langages et compilateurs 4
Comp2 Compilateurs et assembleur 4
Control1 Théorie de contrôle 3
Control2 Système dynamiques, théorie de contrôle 3
Data0 Base de données et SQL 2
Data1 Base de données avancé 3

Donner la liste d’inscrits dans un cours, et les ordonner par la note donnée par le conseiller.q On test pour cours=“AUT18Ana01”.

SELECT Etudiant.id, Etudiant.prenom, Etudiant.nom,
    InscriptionCours.noteConseiller, InscriptionCours.suivreCours
FROM InscriptionCours
INNER JOIN Etudiant ON InscriptionCours.etudiant = Etudiant.id
WHERE InscriptionCours.cours = ?codeCours
ORDER BY InscriptionCours.noteConseiller DESC;
Displaying records 1 - 10
id prenom nom noteConseiller suivreCours
92 Diego Chevalier 9 1
77 Alexia Rousseau 8 1
74 Françoise Olivier 8 1
45 Constant Laurent 8 1
40 Kylian Meunier 7 1
65 Mélissa Pierre 7 0
37 Baptiste Garcia 6 0
88 Alexis Rolland 6 0
68 Constant Le goff 6 1
13 Félix Renaud 5 0

Donner la liste de enseignant dans un domain (domain=“Combinatoires”).

SELECT DISTINCT Professeur.id, Professeur.nom, Professeur.prenom
FROM Cours
INNER JOIN Professeur ON Cours.enseignant = Professeur.id
INNER JOIN Matiere ON Cours.matiere = Matiere.code
WHERE Matiere.nomDomaine = ?domaine;
4 records
id nom prenom
18 Humbert Capucine
17 Noel Lauriane
16 Roger Élouan
15 Guillot Antoine

Conclusion

Ce projet n’a pas été ma première expérience dans la conception de base de données. En revanche, cela m’a permis de m’entrainer sur la conception et la manipulation des bases de données.

En effet, j’aurais préféré pouvoir aller plus loin dans ce projet en définissant plus de routines/requêtes qui permettent de répondre à toutes les questions possibles concernant le choix des matières, tel qui pourra être adopté par un intranet d’un établissement d’un modèle compatible. Mais étant seul à travailler sur ce projet, j’ai dû me contenter des résultats actuels.