sio2:exercice_d_application

Procédures stockées et fonctions avec MariaDB

La société de transport de personnes TOPCHRONO souhaite mettre en place une plateforme extranet à destination des particuliers. L’application proposera des services similaires à ceux proposés par la plateforme UBER :

  1. La plateforme répertorie les chauffeurs et les passagers. Diverses informations sont conservées à leur sujet : adresse email, prénom, nom, « hash » du mot de passe, etc. Rien n’empêche a priori qu’un chauffeur en repos puisse être passager !
  2. TOPCHRONO effectue une qualification de tous les chauffeurs, à savoir qu’un chauffeur effectue une inscription préalable. Son inscription n’est « convertie » en un compte chauffeur qu’une fois l’inscription validée. Afin de pouvoir afficher le périmètre d’intervention d’un chauffeur, on souhaite pouvoir conserver son adresse principale sous la forme d’un couple longitude et latitude. Il appartient au chauffeur de choisir son périmètre d’intervention. On suppose que le périmètre d’intervention du chauffeur est un cercle.
  3. Un passager propose une course en partance d’un lieu et à destination d’un autre lieu. Pour des raisons d’affichage encore, les lieux sont stockés sous la forme de couples longitude/latitude. La course intervient à une date et une heure donnée. Le logiciel se charge de fournir une estimation de la date et de l’heure d’arrivée.
  4. Les chauffeurs peuvent consulter les courses qui sont dans leur périmètre d’intervention. Si la course est dans ce périmètre, ils peuvent proposer leurs services à titre de candidats. Ils peuvent alors consulter les coordonnées du passager et le contacter. Il appartient au passager de choisir le chauffeur qui réalisera sa course. Pour l’accompagner dans sa décision, grâce à la plateforme, le passager peut consulter le profil des chauffeurs et son tarif. La plateforme fournie, pour chaque chauffeur une estimation du tarif pratiqué ;
  5. Dans la première version, le tarif du chauffeur est tarif forfaitaire (montant fixe) assorti d’un tarif kilométrique ;
  6. Pour chaque course, la longueur du trajet est stockée. Elle est arrondie au kilomètre le plus proche. Elle est obtenue grâce à l’API Google Maps. Cette longueur sert de base de calcul à l’estimation du tarif pratiqué par le chauffeur.
  7. Par ailleurs, TOPCHRONO, société soucieuse de respecter ses partenaires, chauffeurs et passages, prélève une commission d’apporteur d’affaire sur chacune des candidatures des chauffeurs. La commission est un montant fixe fonction de la longueur du trajet. Le montant est fixé au moyen d’un barème progressif (exemple : 5€ si le trajet a une longueur comprise entre 0km et 49km, 9€ s’il est compris entre 50km et 99km, etc.).
  1. 45min maxi : Modéliser la base de données sous forme d’un diagramme de classes(données et liens entre classes avec multiplicités).
    1. Rendre votre modèle.
    2. Récupérer le script de création de la BD.
  2. 20min maxi : Afin de mieux répondre aux attentes des chauffeurs, proposer une évolution de la base de données leur permettant de fixer un tarif kilométrique dégressif, à savoir diminuant (ou augmentant) en fonction de la longueur du trajet, rendre votre proposition qui ne sera pas implantée pour l'instant dans la base de données.

Implémenter la fonction stockée tarifCommission(distance INT) AS DECIMAL qui retourne la commission pratiquée en fonction de la longueur d’un trajet :

CREATE FUNCTION tarifCommission(distance INT) RETURNS DECIMAL DETERMINISTIC
BEGIN RETURN ( SELECT tarif FROM Commission WHERE distance >= min AND distance < max ) ; 
END$$
  1. Remplir la table commission avec le début de barême indiqué.
  2. Tester la function en l’appelant : SELECT tarifCommission(25);
  3. Quel résultat obtenez-vous ? Est-ce normal ?

Implémenter la fonction stockée tarifChauffeur(numChauffeur INT, distance INT) qui retourne le tarif* pratiqué par un chauffeur en fonction de la longueur d’un trajet.

  1. Présenter l’algorithme avant de coder
  2. Programmer la fonction et la tester avec un jeu d'essais

*Remarque : partie fixe + partie variable selon la distance

Coder la procédure stockée tarifChauffeurs(distance INT) qui affiche le tarif pratiqué par l’ensemble des chauffeurs en fonction de la longueur d’un trajet.

  • Présenter l’algorithme avant de coder

Coder la procédure stockée validerInscription(numChauffeur INT) permettant de valider(accepter) l’inscription d’un chauffeur.

  • Présenter l’algorithme avant de coder

Remarques :

  1. on ne valide une inscription que s'il y a une inscription correspondant au n° du futur chauffeur passé en paramètre.
  2. on ne valide une inscription que si l'inscription n'a pas encore été validée(refus ou acceptation)
  3. validation en trois temps : mise à jour du type de la personne correspondante + enregistrement du chauffeur + mise à jour du champ acceptationDate

Remarque sur le type d’une personne : une personne est soit « Passager » (par défaut) soit « Inscription » pour une personne qui a fait une demande d’inscription pour devenir chauffeur sans être déjà passager. Elle devient « Chauffeur » si sa demande d'inscription a été acceptée. Un passager qui demande à devenir chauffeur est un « PassagerInscription ». Si sa demande d’inscription pour devenir chauffeur est acceptée elle devient « ChauffeurPassager».

Exemple d’utilisation de WHILE pour parcourir un jeu d’enregistrements :

DECLARE curseur CURSOR FOR ( SELECT champ1, champ2 FROM table1 … ) ; -- lignes à parcourir
DECLARE i INT ; -- compteur pour parcourir les lignes
  SELECT count(*) INTO @Nb FROM table1 … ; -- comptage du nombre de lignes à parcourir
    i = 0
  WHILE i < Nb DO
      FETCH curseur INTO var1, var2 ; -- récupère le contenu de la ligne courante et passé à la suivante
      ….
  END WHILE ;
  • sio2/exercice_d_application.txt
  • Dernière modification : 2024/11/28 08:51
  • de dthevenot