TP d`ABD

Transcription

TP d`ABD
TP d’ABD no 6
21 février 2016
Objectif : manipulation des procédures stockées.
Un compte-rendu sera à déposer sur Moodle selon les mêmes modalités que le précédent TP. Le
SGBD utilisé sera PostgreSQL.
1
Gestion des visites médicales dans un hôpital
On étudie les visites médicales d’un hôpital. Un patient peut avoir plusieurs médecins et un médecin
plusieurs patients. Une visite ne concerne qu’un médecin et qu’un patient à la fois. Elle donne lieu à la
prescription de zéro ou plusieurs médicaments. Voici le modèle relationnel associé :
SERVICE(codeService,nom,categorie)
MEDECIN(matriculeMedecin,nom,prenom,@codeService,grade,dateEmbauche)
MEDICAMENT(codeMedicament,libelle,forme,prix)
PATIENT(numSecuPatient,nom,prenom,adresse,rhesus)
VISITE(codeVisite,@matriculeMedecin,@numSecuPatient,dateEtHeure,duree)
PRESCRIPTION(@codeVisite,@codeMedicament,posologie,duree)
Les clés primaires sont soulignées et les clés étrangères sont précédées d’une arobase.
Générer la base de données associée à partir du fichier Hopital_creation.sql.
1.1
Alimentation
Insérer des données avec les requêtes du fichier Hopital_insertion.sql.
1.2
Procédures stockées
Produire une procédure pour chacun des points suivants (fournir le jeu de requêtes utilisé pour les
valider) :
1. Écrire une fonction stockée calculSalaire() qui prend en entrée le matricule d’un médecin
et qui retourne en sortie son salaire net pour le mois en cours (on considère que la base de
données contient uniquement les visites du mois en cours et ne conserve pas l’historique des mois
précédents). Le salaire dépend de la catégorie du service de rattachement (A, B ou C), du grade du
médecin (Externe, Interne, PH ou Chef de service), de l’expérience (i.e., de sa date d’embauche),
ainsi que de la durée cumulée de ses visites dans le mois (la durée d’une visite est stockée en
minutes dans la base). Informations à prendre en compte :
— Coefficient de catégorie de service : A=1, B=1.5 et C=1.8.
— Salaire de base : 1200 pour les externes, 1800 pour les internes, 2500 pour les PH et 4500 pour
les chefs de service.
— La formule de calcul du salaire brut d’un médecin pour le mois courant est la suivante :
Salaire brut = Salaire de base × Coefficient de catégorie + 12 euros supplémentaires par mois
d’ancienneté + 1 euro par minute de visite.
— Un malus de 500 euros est retiré si la durée moyenne des visites est inférieure à 15 min ou si
l’écart-type de la durée des visites est supérieur à 30 min.
— Un bonus de 300 euros est ajouté si la durée moyenne des visites est supérieure à 25 min et si
l’écart-type de la durée des visites est inférieure à 18 min.
1
— Le salaire net s’obtient enfin en retranchant 19% du salaire brut.
Bonus Écrire une procédure stockée réalisant les trois opérations suivantes dans l’ordre indiqué.
(a) Supprime tous les patients ayant reçu au moins une visite du Dr Eric Foreman.
(b) Double le prix des médicaments en poudre ayant été au moins une fois prescrits par Gregory
House (on souhaite ici une requête secondaire corrélée avec une requête principale).
(c) Supprime tous les médecins ayant un salaire de plus de 10000 euros.
2