ALSI S25 DA – EVALUATION – Cas TRANSPORT SCOLAIRE STS2 IG Base de données Le sujet comporte 3 pages. Durée du devoir : 1 H Le 10/04/2003 page 1/6 Lexique SQL autorisé Tous les exercices sont indépendants 1. EXERCICE 1 : ORGANISATION DU TRANSPORT SCOLAIRE Le Conseil Général d’un département rural du Sud de la France souhaite mettre en place une application informatique prévoyant que chaque mairie ou mairie annexe (jusqu’à 6 pour les plus grandes villes du département) sera équipée d’au moins un ordinateur et d’un moyen de connexion au serveur du Conseil Général. La première application qui sera mise en place et qui servira de projet pilote concerne le transport scolaire pour les liaisons internes au département. Le Conseil Général subventionne en partie les transports scolaires des élèves vers leurs établissements, une part restant à la charge des familles. Le Conseil Général centralise les inscriptions issues des Mairies et se charge de l’édition et de la diffusion des cartes de transport. Il tient à ce que ces cartes soient individuelles et non falsifiables. L’inscription, la facturation aux familles ainsi que son suivi sont également assurés par le Conseil Général. Une facture concerne tous les enfants d’une même famille. A partir du tarif de base dépendant de la zone de tarification, les mairies peuvent accorder 2 types de remise différents. Ces taux de remise varient suivant les mairies. Le MPD issu du MCD en annexe est le suivant : FACTURE (NoFact, DteFact, MontantFact, CodeTrimestre, CodeFamille#) FAMILLE(CodeFamille, NomResp, CodeResp,AdresseFamille, CodeMairie#, …) ELEVE(NoCarte, Nom, Prenom, Classe, ArretMontee#, ArretDescente#, CodeEtablissement#, ZoneTarifaire#, codeFamille#) ETABLISSEMENT(CodeEtablissement, Nom, Adresse, CodeArret# MAIRIE(CodeCommune#, CodeMairie, Adresse, Type) COMMUNE(CodeCommune, Nom) …etc TRAVAIL A FAIRE 1. (3 pts) Dès qu’un élève est inscrit dans sa mairie, la modification doit être répercutée au Conseil Général. Quelle solution proposez-vous pour réaliser ce contrôle ? Donner l’entête de l’instruction SQL. 2. (2 pts) Chaque trimestre, le Conseil Général assure la facturation aux familles. Quelle solution proposez-vous pour réaliser le calcul de la facture ? Donner l’entête de l’instruction SQL. D:\769782597.doc ALSI S25 DA – EVALUATION – Cas TRANSPORT SCOLAIRE STS2 IG Base de données Le 10/04/2003 page 2/6 2. EXERCICE 2 : GESTION DES TOURNEES La société CARACOLE obtient le marché du transport scolaire dans le sud de la France. Une partie du système d'information mis en place par la société CARACOLE vous est présenté ci-dessous sous forme de relations. Ce système d'informations sera réalisé avec un SGBD relationnel. CONDUCTEUR(numCond, nom, prenom, dateEmbauche, salaire) AUTOBUS(numBus, immat, nb_place) CONDUIT(numCond#, numBus#, dateDeb, heureDeb, num_ligne#) LIGNE(numLigne, nbKmParcouru, dureeParcours, heureBus1) AFFECTE(numBus#, num_ligne#) Remarque : Une occurrence de la relation AFFECTE représente la possibilité pour un autobus donné d’être utilisé sur une ligne donnée. Une occurrence de la relation CONDUIT représente la conduite par un conducteur donné d’un autobus donné à une date et à une heure données, cette conduite étant faite sur une des lignes. TRAVAIL A FAIRE 1. (2 * 1 pt)Donner 2 solutions permettant de contrôler que l’ajout d’une occurrence dans CONDUIT ne puisse se faire que s’il y a déjà une occurrence correspondante dans AFFECTE. 2. (2 + 4 pts)Donner les 2 instructions SQL complètes en utilisant la syntaxe d’ORACLE. D:\769782597.doc ALSI S25 DA – EVALUATION – Cas TRANSPORT SCOLAIRE STS2 IG Base de données Le 10/04/2003 page 3/6 3. EXERCICE 3 TRAVAIL A FAIRE 1. (2 pts) Décrire en 1 ou 2 phrases le traitement réalisé par cette procédure. 2. (3 pts) Expliquer la démarche à suivre pour créer et utiliser un traitement stocké (procédure ou fonction ) dans une base de données 3. (2 pts) Discutez de l’intérêt d’une telle solution (au moins 2 avantages) D:\769782597.doc ALSI S25 DA – EVALUATION – Cas TRANSPORT SCOLAIRE STS2 IG Base de données ANNEXE : MCD TRANSPORT SCOLAIRE D:\769782597.doc Le 10/04/2003 page 4/6 ALSI S25 DA – EVALUATION – Cas TRANSPORT SCOLAIRE STS2 IG Base de données Le 10/04/2003 page 5/6 EXERCICE 1 1 - Dès qu’un élève est inscrit dans sa mairie, la modification doit être répercutée au Conseil Général. Quelle solution proposez-vous pour réaliser ce contrôle ? Donner l’entête de l’instruction SQL. Il s’agit ici de réaliser une réplication synchrone entre la Mairie et le Conseil Général. On crée un trigger qui, à chaque modification de la table ELEVE, répercute les mêmes modifications sur la base distante du Conseil Général. CREATE TRIGGER trg_copie_donnee AFTER INSERT ON eleve FOR EACH ROW BEGIN INSERT INTO eleve@BDDist VALUES (:NEW.NoCarte, :NEW.Nom, :NEW.prenom…); ENDIdem pour le UPDATE et le DELETE Idem pour chaque table à répliquer 2 - Chaque trimestre, le Conseil Général assure la facturation aux familles. Quelle solution proposez-vous pour réaliser le calcul de la facture ? Donner l’entête de l’instruction SQL. Une procédure stockée dont l’exécution est lancée par un IHM Client tous les trimestre. CREATE OR REPLACE PROCEDURE proc_facturation IS BEGIN … END EXERCICE 2 1 - Donner 2 solutions permettant de contrôler que l’ajout d’une occurrence dans CONDUIT ne puisse se faire que s’il y a déjà une occurrence correspondante dans AFFECTE. Solution 1 : créer un trigger qui vérifie à chaque insertion dans CONDUIT qu’il existe bien une occurrence dans AFFECTE Solution 2 : créer une clé étrangère sur les 2 colonnes bus et ligne 2 - Donner les 2 instructions SQL complètes en utilisant la syntaxe d’ORACLE. Solution 2 ALTER TABLE CONDUIT ADD CONSTRAINT PK_VERIF_AFFECTE FOREIGN KEY (numbus, numligne) REFERENCES AFFECTE(numbus, numligne) D:\769782597.doc ALSI S25 DA – EVALUATION – Cas TRANSPORT SCOLAIRE STS2 IG Base de données Le 10/04/2003 page 6/6 Solution 1 CREATE TRIGGER trg_verif_conduit AFTER INSERT ON conduit FOR EACH ROW BEGIN SELECT numbus, numligne FROM AFFECTE WHERE numbus = :NEW.numbus AND numligne = :NEW.numligne; EXCEPTION WHEN NO_DATA_FOUND THEN ‘Interrompre la procédure RAISE_APPLICATION_ERROR(-20001, 'Bus et ligne inexistants dans AFFECTE'); ENDEXERCICE 3 1 - Décrire en 1 ou 2 phrases le traitement réalisé par cette procédure. Cette procédure stocke les 3 produits les plus chers de chaque catégorie dans la table TEMPO-ART. 2 - Expliquer la démarche à suivre pour créer et utiliser un traitement stocké (procédure ou fonction ) dans une base de données a) Création d’une fonction ou d’une procédure stockée dans la base de données, en utilisant le langage fourni avec le SGBDR. Exemple avec Oracle (langage PL/SQL) : CREATE FUNCTION ListeArticles RETURN number AS BEGIN /* code procédural de la fonction */ END ; Avec les SGBDR ne supportant pas l’ordre CREATE FUNCTION, on utilisera l’ordre CREATE PROCEDURE. CREATE PROCEDURE ListeArticles (ValRetour OUT) AS BEGIN /* code procédural de la procédure */ END ; b) Stockage dans la BD en exécutant ce script. Le code est compilé, les schémas d’exécution des requêtes sont prévus. c) Appel de la fonction ou de la procédure stockée à partir de l’application cliente, selon l’une des modalités suivantes : /* pour une fonction */ /* pour une procédure */ Resultat = ListeArticles EXEC (ou CALL) ListeArticles (Résultat) 3 - Discutez de l’intérêt d’une telle solution (au moins 2 avantages) Cf le cours D:\769782597.doc