d4:tp03

Ceci est une ancienne révision du document !


D4-TP03 : Les procédures et fonctions stockées en SQL

TOPCHRONO développe une plateforme de réservation de courses similaire à Uber. L’objectif est de gérer chauffeurs, passagers, trajets et tarifications, avec des règles métier encapsulées dans la base via fonctions et procédures stockées.

Cela permet :

  • Performance : calcul direct côté serveur.
  • Sécurité : les applis n’accèdent pas aux tables, mais uniquement aux procédures.
  • Cohérence métier : mêmes règles de calcul pour toutes les applis (web, mobile).
  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 et veut en garder une trace, à 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 un 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.).

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».

  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 : Ajouter un barème dégressif de tarif kilométrique pour préparer une future évolution : 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.

Note: Implanter le script de création de la base de données fourni pour faire le travail suivant

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 : tarif d'un chauffeur = partie fixe + partie variable selon la distance

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

  • Présenter l’algorithme avant de coder
  • Utiliser la fonction tarifChauffeur définie précédemment

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
  • d4/tp03.1759335110.txt.gz
  • Dernière modification : 2025/10/01 18:11
  • de dthevenot