⌂  Menu général
Chapitre Bases de données

Correction de l'évaluation

Le sujet « Covoiturage » corrigé, question par question. Chaque réponse est repliée : essaie de comparer avec ce que tu as écrit avant de la déplier.

Sujet · Covoiturage Barème · /20 Séance · 7 / 7
Rappel

Le schéma du sujet

UTILISATEUR(id_utilisateur, nom, prenom, email, note_moyenne) TRAJET(id_trajet, #id_conducteur, ville_depart, ville_arrivee, date_heure_depart, nb_places, prix_place) RESERVATION(id_reservation, #id_trajet, #id_passager, nb_places_reservees, date_reservation)

id_conducteur (dans TRAJET) et id_passager (dans RESERVATION) référencent tous deux UTILISATEUR.

Rappel

Les données

UTILISATEUR
1, Bernard, Julie, note 4.8
2, Morel, Adam, note 4.2
3, Faure, Sarah, note NULL
4, Simon, Lucas, note 3.9
TRAJET
1: Lyon→Grenoble, 3pl, 8€ (cond.1)
2: Lyon→Paris, 2pl, 35€ (cond.2)
3: Grenoble→Lyon, 3pl, 8€ (cond.1)
4: Lyon→Marseille, 4pl, 25€ (cond.4)
RESERVATION
1: trajet1, passager3, 1 place
2: trajet1, passager4, 2 places
3: trajet2, passager3, 1 place
4: trajet4, passager2, 2 places
5: trajet4, passager3, 1 place
Correction

Question par question

Q12 pts

Clé primaire de RESERVATION et ses clés étrangères. Pourquoi id_conducteur et id_passager référencent la même table ?

Clé primaire : id_reservation. Clés étrangères : #id_trajet (→ TRAJET) et #id_passager (→ UTILISATEUR). id_conducteur et id_passager référencent tous deux UTILISATEUR car un même utilisateur peut être à la fois conducteur et passager : ce sont deux rôles différents joués par la même entité.
Q22 pts

Trajets au départ de Lyon.

SELECT * FROM TRAJET WHERE ville_depart = 'Lyon';
→ trajets 1, 2 et 4.
Q32 pts

Utilisateurs sans note moyenne.

SELECT * FROM UTILISATEUR WHERE note_moyenne IS NULL;
→ Sarah Faure. Attention : IS NULL, jamais = NULL.
Q43 pts

Pour chaque réservation : nom du passager + villes de départ/arrivée du trajet.

SELECT UTILISATEUR.nom, TRAJET.ville_depart, TRAJET.ville_arrivee FROM RESERVATION JOIN UTILISATEUR ON RESERVATION.id_passager = UTILISATEUR.id_utilisateur JOIN TRAJET ON RESERVATION.id_trajet = TRAJET.id_trajet;
Q53 pts

Trajets à moins de 20€/place, triés du moins cher au plus cher.

SELECT * FROM TRAJET WHERE prix_place < 20 ORDER BY prix_place ASC;
→ trajets 1 et 3 (8€).
Q63 pts

Nombre total de places réservées, par trajet.

SELECT id_trajet, SUM(nb_places_reservees) AS places_reservees FROM RESERVATION GROUP BY id_trajet;
→ trajet 1 : 3 · trajet 2 : 1 · trajet 4 : 3.
Q73 pts

Le trajet 2 change de prix : 40€ la place.

UPDATE TRAJET SET prix_place = 40 WHERE id_trajet = 2;
Q82 pts

Le nombre de places réservées sur le trajet 4 peut-il dépasser nb_places ? La base l'empêche-t-elle ?

Oui, cela peut dépasser : rien ne l'empêche structurellement. Les contraintes de clé primaire/étrangère garantissent seulement que chaque réservation référence un trajet et un passager existants — aucune contrainte ne vérifie que la somme des places réservées reste inférieure ou égale à nb_places. Il faudrait une règle supplémentaire (CHECK avancé, trigger, ou vérification côté application).
Barème total
2+2+2+3+3+3+3+2
/ 20
Fin du chapitre

Bilan des 7 séances

Modèle relationnel et conception (S1) · contraintes d'intégrité et rôle du SGBD (S2) · création et mise à jour en SQL (S3) · interrogation simple (S4) · JOIN et agrégats (S5) · entraînement bac (S6) · évaluation (S7). Relis les bilans de vocabulaire de chaque page pour réviser l'ensemble du chapitre.