Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sio2:exercice_d_application [2024/10/16 23:13] – [D-Procédures stockées] dthevenot | sio2:exercice_d_application [2025/03/25 08:49] (Version actuelle) – [Contexte] dthevenot | ||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
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 : | 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 : | ||
- 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 ! | - 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 ! | ||
- | - 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. | + | - TOPCHRONO effectue une qualification de tous les chauffeurs |
- 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/ | - 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/ | ||
- Les chauffeurs peuvent consulter les courses qui sont dans leur périmètre d’intervention. Si la course est dans ce périmètre, | - Les chauffeurs peuvent consulter les courses qui sont dans leur périmètre d’intervention. Si la course est dans ce périmètre, | ||
- Dans la première version, le tarif du chauffeur est **tarif forfaitaire (montant fixe) assorti d’un tarif kilométrique** ; | - Dans la première version, le tarif du chauffeur est **tarif forfaitaire (montant fixe) assorti d’un tarif kilométrique** ; | ||
- 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. | - 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. | ||
- | - Par ailleurs, TOPCHRONO, société soucieuse de respecter ses partenaires, | + | - Par ailleurs, TOPCHRONO, société soucieuse de respecter ses partenaires, |
===== A-Travail à faire au préalable : Travail préalable - Modélisation de la base de données ===== | ===== A-Travail à faire au préalable : Travail préalable - Modélisation de la base de données ===== | ||
- | - 45min maxi : Modéliser la base de données sous forme d’un diagramme de classes. | + | - 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). |
- Rendre votre modèle. | - Rendre votre modèle. | ||
- Récupérer le script de création de la BD. | - Récupérer le script de création de la BD. | ||
Ligne 19: | Ligne 19: | ||
===== B-Implanter la base de données à partir du script fourni. ===== | ===== B-Implanter la base de données à partir du script fourni. ===== | ||
===== C-Fonctions stockées ===== | ===== C-Fonctions stocké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 : | + | **1)** |
< | < | ||
- | CREATE FUNCTION | + | CREATE FUNCTION |
BEGIN RETURN ( SELECT tarif FROM Commission WHERE distance >= min AND distance < max ) ; | BEGIN RETURN ( SELECT tarif FROM Commission WHERE distance >= min AND distance < max ) ; | ||
END$$</ | END$$</ | ||
Ligne 29: | Ligne 29: | ||
- Quel résultat obtenez-vous ? Est-ce normal ? | - Quel résultat obtenez-vous ? Est-ce normal ? | ||
- | + | **2)** | |
- | 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. | + | |
- Présenter l’algorithme avant de coder | - Présenter l’algorithme avant de coder | ||
- Programmer la fonction et la tester avec un jeu d' | - Programmer la fonction et la tester avec un jeu d' | ||
- | ***Remarque** : partie fixe + partie variable selon la distance | + | ***Remarque** : tarif d'un chauffeur = |
===== D-Procédures stockées ===== | ===== D-Procédures stockées ===== | ||
- | Coder la procédure stockée **tarifChauffeurs(distance INT)** | + | **1)** |
* Présenter l’algorithme avant de coder | * 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. | + | **2)** |
* Présenter l’algorithme avant de coder | * Présenter l’algorithme avant de coder | ||
**Remarques :** | **Remarques :** | ||
Ligne 45: | Ligne 45: | ||
- on ne valide une inscription que si l' | - on ne valide une inscription que si l' | ||
- validation en trois temps : mise à jour du type de la personne correspondante + enregistrement du chauffeur + mise à jour du champ acceptationDate | - 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 :** « P » pour passager, | + | **Remarque sur le type d’une personne :** une personne est soit « Passager |
__Exemple d’utilisation de WHILE pour parcourir un jeu d’enregistrements :__ | __Exemple d’utilisation de WHILE pour parcourir un jeu d’enregistrements :__ | ||
Ligne 51: | Ligne 51: | ||
< | < | ||
DECLARE curseur CURSOR FOR ( SELECT champ1, champ2 FROM table1 … ) ; -- lignes à parcourir | DECLARE curseur CURSOR FOR ( SELECT champ1, champ2 FROM table1 … ) ; -- lignes à parcourir | ||
- | DECLARE i AS INT ; -- compteur pour parcourir les lignes | + | DECLARE i INT ; -- compteur pour parcourir les lignes |
SELECT count(*) INTO @Nb FROM table1 … ; -- comptage du nombre de lignes à parcourir | SELECT count(*) INTO @Nb FROM table1 … ; -- comptage du nombre de lignes à parcourir | ||
i = 0 | i = 0 |