Vous êtes sur la page 1sur 5

L3 MIAGE – 2015/2016

Projet de Bases de Donn´ees


septembre 2015

Auto-´ecole

Avertissement : Ce projet intervient en grande partie dans la note de TP. Cette note compte
pour les 2 sessions. Un projet non rendu p´enalise donc fortement votre note de premi`ere
et de seconde session.

1 Travail `a r´ealiser
Cette section peut ˆetre amend´ee par votre enseignante de TD.
Vous devez terminer ce travail par binˆome pour le 20 novembre.

1. rendre la premi`ere partie pour le vendredi 16 octobre 19h via l’interface PROF : rendre un
script SQL avec tous les ordres de cr´eation des tables.

2. Vous rendrez avant le vendredi 20 novembre 19h via l’interface PROF un fichier contenant
le code SQL r´epondant à chaque question (cr´eation du sch´ema : tables, triggers, pro-
grammes, vues), ainsi que le script permettant de tester (insertion/suppression/modification
de donn´ees, appels de proc´edures, ...), en pr´ecisant bien quel compte Oracle vous avez utilis´e.

2 Sujet
Une auto-´ecole veut s’informatiser afin de g´erer plus facilement les ´el`eves inscrits, les le¸cons de
conduite, le suivi de la conduite accompagn´ee, et le passage des examens. On ne s’int´eressera
qu’au permis B, permettant de conduire une voiture. Quand un ´el`eve arrive `a l’auto-´ecole pour la
premi`ere fois, on ouvre un dossier et il commence par apprendre le code. Une fois qu’il a obtenu
le code, on m´emorise la date d’obtention du code et l’´el`eve peut apprendre ` a conduire. S’offrent
`a lui 2 possibilit´es :
1. L’apprentissage ”classique” de la conduite, avec des le¸ cons prises sous le contrˆ ole d’un moni-
teur. Dans ce cas l’´el`eve doit avoir plus de 18 ans.
2. La conduite accompagn´ee, qui combine des le¸cons prises avec un moniteur et de la conduite
sous contrˆole d’un titulaire du permis B. Il existe 2 formes de conduite accompagn´ee :
l’apprentissage anticip´e de la conduite, pour les plus de 15 ans, et la conduite supervis´ee
pour les plus de 18 ans.

Pour apprendre ` a conduire, un ´el`eve va devoir s’inscrire en choisissant le type d’apprentissage


(”classique”, anticip´e ou supervis´e). Une fois qu’il sera apte ` a passer son permis, on lui fixera
une date de passage de l’examen, puis une fois qu’il aura pass´e l’examen, on en m´emorisera le
r´esultat. S’il a rat´e son permis, il devra reprendre une inscription, donc choisir `a nouveau un type
d’apprentissage, etc ... S’il rate 5 fois l’examen de la conduite, l’´el`eve doit repasser le code avant
de pouvoir `a nouveau passer le permis.
2 L3 MIAGE – 2015/2016 : Projet de Bases de Donn´ees

Voici le Mod`ele Conceptuel des Donn´ees (MCD) imagin´e pour cette base de donn´ees :

Informations compl´ementaires :
• TRAJET : un ´el`eve effectue un trajet `a une certaine date, en parcourant un certain nombre
de kilom`etres sur un type de route (route, ville, autoroute). Pour am´eliorer la pr´ecision,
l_nb_km sera exprim´e avec un 1 chiffre apr`es la virgule.
• ELEVE : e_date_code est la date d’obtention du code de la route, e_date_dossier est la
date d’ouverture du dossier ` a l’auto-´ecole. Lorsqu’un ´el`eve ouvre un dossier il n’a en g´en´eral
pas le code.
• LECON : un ´el`eve suit une le¸con de conduite avec un moniteur, ` a une certaine date. La dur´ee
de la le¸con est exprim´ee en heures (ce n’est pas toujours un nombre entier, si on autorise
des le¸cons d’une heure trente par exemple).
• INSCRIPTION : un ´el`eve prend une inscription `a l’apprentissage de la conduite. cela sup-
pose qu’il a d´ej`a obtenu le code. Cette inscription est prise en vue de passer l’examen
de la conduite (date inconnue au moment o` u l’´el`eve s’inscrit). Le type d’inscription varie
selon la m´ethode d’apprentissage : classique, supervis´e ou anticip´e (cf description du sujet).
i_num permet de m´emoriser le nombre d’inscriptions donc de passage de l’examen du permis
(i_num = 1 pour une premi`ere inscription). On peut remarquer qu’il n’y a pas plus d’une
ligne avec i_date_d’examen ou i_resultat ` a null pour un ´el`eve donn´e.

2.1 Partie `a rendre pour le vendredi 16 octobre


Tables
Question 2.1 : Cr´eer les tables en pensant aux contraintes d’int´egrit´e : tout ce qui sera d´efini
dans le sch´ema ne sera plus `a v´erifier par les programmes stock´es.
Auto-´ecole 3

2.2 Partie `a rendre pour le vendredi 20 novembre


Par la suite, vous utiliserez des s´equences pour g´en´erer les cl´es primaires.

Triggers
Question 2.2 : Cr´eer un trigger qui contrˆ ole certaines donn´ees de la table ELEVE :
• on souhaite que les nom et pr´enom soient toujours en majuscule
• on souhaite que la date de cr´eation du dossier soit toujours renseign´ee, en choisissant
´eventuellement la date courante si aucune date n’est fournie `a l’insertion, ou en conservant
l’ancienne date si elle est remplac´ee par ”null” lors d’une mise `a jour.
• on utilise une s´equence pour g´en´erer la cl´e primaire. On ne veut pas que cette cl´e primaire
puisse ˆetre modifi´ee une fois qu’elle est affect´ee `a un ´el`eve.

Question 2.3 : Ajouter/modifier des ´el`eves pour v´erifier le bon fonctionnement du trigger.

Pour avoir le droit de passer le permis, un ´el`eve doit comptabiliser un certain nombre d’heures de
le¸cons et un certain nombre de kilom`etres s’il est en conduite accompagn´ee. Pour ´eviter de refaire
toujours les mˆemes calculs, on d´ecide de stocker l’information dans la table ELEVE.
Question 2.4 : A l’aide de l’instruction SQL ALTER TABLE, ajouter 2 colonnes `a la table ELEVE :
une colonne e_nb_km qui donne le nombre total de kilom`etres parcourus en conduite accompagn´ee,
et une colonne e_nbh_lecons qui donne le nombre total d’heures de le¸cons de conduite.

Question 2.5 : Si on avait d´ej`a ins´er´e des donn´ees dans les tables LECON et TRAJET, que faudrait-il
poser comme requˆete SQL (update sur ELEVE) pour que les 2 colonnes e_nb_km et e_nbh_lecons
contiennent les bonnes donn´ees ?

Question 2.6 : Ecrire un trigger sur TRAJET et un trigger sur LECON afin de g´erer la redondance
d’information introduite par l’ajout de ces deux colonnes dans la table ELEVE. On n’utilisera pas
les requˆetes de la question pr´ec´edente, parce que ce serait trop coˆ uteux de recalculer ` a chaque fois
le nombre de kilom`etres et le nombre d’heures de le¸ cons d’un (ou de tous les) ´el`eve(s).

Question 2.7 : Tester les triggers pr´ec´edents en faisant ´evoluer les instances de TRAJET et LECON
(en ayant au pr´ealable ajout´e des moniteurs).

Paquetage PL/SQL
On d´ecide d’´ecrire un package stock´e pour g´erer les inscriptions `a la conduite, et les passages de
l’´epreuve pratique du permis de conduire. Voici la sp´ecification de ce package :

create or replace package paq_conduite as

-- inscription `a des cours de conduite en vue de passer le permis


procedure inscrire_conduite(id_eleve eleve.e_id%type,
la_date_inscr inscription.i_date_inscr%type := sysdate,
le_type inscription.i_type%type
);
4 L3 MIAGE – 2015/2016 : Projet de Bases de Donn´ees

-- inscription `a l’examen du permis d’un ´el`eve qui suit d´ej`a des le¸cons
procedure inscrire_examen(id_eleve eleve.e_id%type,
la_date_examen inscription.i_date_exam%type
);

-- on met `a jour les r´esultats de l’examen du permis


procedure resultat_examen(id_eleve eleve.e_id%type,
le_resultat inscription.i_resultat%type
);

ELEVE_INCONNU Exception ;
pragma exception_init(ELEVE_INCONNU, -20099);
PAS_DE_CODE Exception ;
pragma exception_init(PAS_DE_CODE, -20100);
PB_AGE Exception ;
pragma exception_init(PB_AGE, -20101);
PB_CONDITION Exception ;
pragma exception_init(PB_CONDITION, -20102);
DATE_DEJA_PRISE Exception ;
pragma exception_init(PB_CONDITION, -20103);
end paq_conduite;

Question 2.8 : Ecrire et tester la proc´edure inscrire_conduite qui permet d’inscrire un ´el`eve `a
l’apprentissage de la conduite, en vue de passer l’examen. Cette proc´edure :
• d´eclenche l’exception ELEVE_INCONNU si l’identifiant id_eleve pass´e en param`etre est incor-
rect.
• v´erifie les conditions d’ˆ age en fonction du type d’inscription (pour l’inscription classique et
l’apprentissage supervis´e, il faut avoir plus de 18 ans, pour l’apprentissage anticip´e, il faut
avoir plus de 15 ans). Si l’âge n’est pas conforme, la proc´edure d´eclenche PB_AGE.
• v´erifie que l’´el`eve a le code, c’est `a dire que la date de l’examen du code est bien renseign´e.
Sinon, la proc´edure d´eclenche PAS_DE_CODE.
• v´erifie que l’´el`eve n’est pas d´ej`a inscrit en vue de passer l’examen (auquel cas on ne fait rien).
• ins`ere une ligne dans la table INSCRIPTION, en ayant donc calcul´e le nombre total d’inscriptions
de cet ´el`eve.A cette ´etape, les champs i_date_exam et i_resultat ne sont pas renseign´es.

Question 2.9 : Ecrire et tester la proc´edure inscrire_examen qui permet d’inscrire un ´el`eve ` a
l’examen. Cette proc´edure :
• d´eclenche l’exception ELEVE_INCONNU si l’identifiant id_eleve pass´e en param`etre est incor-
rect.
• v´erifie que l’´el`eve aura 18 ans `a la date de passage de l’examen, sinon d´eclenche PB_AGE
• v´erifie que l’´el`eve satisfait les conditions concernant l’apprentissage :
– Il a fait au moins 20 heures de le¸ cons (donc il est inscrit `a la conduite)
– il a fait au moins 1000 km dans le cas d’apprentissage supervis´e, et au moins 3000 km
dans le cas d’apprentissage anticip´e.
sinon, d´eclenche PB_CONDITION
• modifie la ligne de la table INSCRIPTION qui correspond `a cet ´el`eve et qui a une date d’examen
à null, afin de renseigner cette date de passage de l’examen. Si une telle ligne n’existe
pas, plus pr´ecis´ement s’il est inscrit avec d´ej`a une date de passage pr´evue, on d´eclenche
DATE_DEJA_PRISE.
Auto-´ecole 5

Lorsqu’un ´el`eve r´eussit le permis de conduire, on archive les donn´ees le concernant dans la table

ARCHIVE(e_id, e_nom, e_prenom, e_date_dossier, e_date_code, e_nb_km, e_nbh_lecons,


a_nb_passages, a_date_prem_exam, a_date_obtention);

Question 2.10 : Ecrire et tester la proc´edure resultat_examen qui


• si l’examen est obtenu, archive les informations concernant l’´el`eve : ins`ere une ligne dans ARCHIVE
et supprime toutes les donn´ees sur l’´el`eve dans les autres tables.
• si l’examen est rat´e, modifie la ligne de la table INSCRIPTION qui correspond ` a cet ´el`eve et ` a ce
passage d’examen (i.e. la ligne dont le r´esultat vaut null).
• si l’examen est rat´e, et que le nombre d’inscriptions est un multiple de 5, annule l’obtention du code
en mettant la date du code ` a null dans la table ELEVE.

Vues
Question 2.11 : Cr´eer des vues permettant d’avoir les informations suivantes :
1. les moniteurs avec leur nombre d’heures de le¸cons.
Schema : MONITEURS_ET_LECONS(m_id, m_nom, m_prenom, total_heures)
2. le(s) moniteur(s) qui a(/ont) le moins d’heures de le¸ cons
Schema : MONITEURS_MIN_HEURES(m_id, m_nom, m_prenom)
3. les ´el`eves avec le nombre de kilom`etres parcourus par type de voie, et le nombre total de kilom`etres
parcourus.
Schema : ELEVES_AVEC_TRAJETS(e_id, e_nom, e_prenom, nb_route, nb_autoroute, nb_ville, nb_total_km)
4. les ´el`eves qui ont d´ejà pass´e le permis (en l’ayant rat´e) mais pas depuis 1 an.
Schema : ELEVES_A_FAIRE_REPASSER(e_id, e_nom, e_prenom, date_dernier_passage)
5. les ´el`eves qui n’ont pas pass´e l’examen depuis 1 an, ou qui n’ont jamais pass´e l’examen mais sont
inscrits depuis au moins 1 an. C’est `a dire tous les ´el`eves de la vue pr´ec´edente, auxquels ont ajoute
ceux qui n’ont jamais pass´e le permis.
Schema : ELEVES_A_FAIRE_PASSER(e_id, e_nom, e_prenom)

Droits
Question 2.12 : Donner `a l’enseignante de TD les autorisations :
• de lire le contenu des tables, et d’en modifier les instances,
• d’ex´ecuter les programmes stock´es,
• de lire les instances des vues.

Vous aimerez peut-être aussi