Exo bac C6.EB1

Cet exercice porte sur les bases de données et le langage SQL.

Pour la gestion des réservations clients, on dispose d’une base de données nommée « gare » dont le schéma relationnel est le suivant :

Train (numT, provenance, destination, horaireArrivee, horaireDepart)
Reservation (numR, nomClient, prenomClient, prix, #numT)

Les attributs soulignés sont des clés primaires. L’attribut précédé de # est une clé étrangère.

La clé étrangère Reservation.numT fait référence à la clé primaire Train.numT.

Les attributs horaireDepart et horaireArrivee sont de type TIME et s’écrivent selon le format "hh:mm", où "hh" représente les heures et "mm" les minutes.

1. Quel nom générique donne-t-on aux logiciels qui assurent, entre autres, la persistance des données, l’efficacité de traitement des requêtes et la sécurisation des accès pour les bases de données ?

2.

a. On considère les requêtes SQL suivantes :

DELETE FROM Train WHERE numT = 1241 ;
DELETE FROM Reservation WHERE numT = 1241 ;

Sachant que le train n°1241 a été enregistré dans la table Train et que des réservations pour ce train ont été enregistrées dans la table Reservation, expliquer pourquoi cette suite d’instructions renvoie une erreur.

b. Citer un cas pour lequel l’insertion d’un enregistrement dans la table Reservation n’est pas possible.

3. Écrire des requêtes SQL correspondant à chacune des instructions suivantes.

a. Donner tous les numéros des trains dont la destination est « Lyon ».

b. Ajouter une réservation n°1307 de 33 € pour M. Alan Turing dans le train n°654.

c. Suite à un changement, l’horaire d’arrivée du train n°7869 est programmé à 08 h 11. Mettre à jour la base de données en conséquence.

4. Que permet de déterminer la requête suivante ?

SELECT COUNT(*) FROM Reservation
WHERE nomClient = "Hopper" AND prenomClient = "Grace";

5. Écrire la requête qui renvoie les destinations et les prix des réservations effectuées par Grace Hopper.

Afficher la correction

1.

Ces logiciels sont appelés des SGBD (Systèmes de Gestion de Base de Données).

2.a.

numT de la table Reservation est une clé étrangère qui fait référence à numT de la table Train.

En supprimant d'abord la valeur 1241 dans la table Train, on génère un erreur pour non respect des contraintes de référence.

En effet, la présence de la valeur 1241 pour l'attribut numT dans la table Reservation nécessite que cette valeur soit présente pour l'attribut numT dans la table Train.

Remarque : pour corriger le problème, il faut inverser l'ordre des requêtes.

DELETE FROM Reservation WHERE numT = 1241 ;
DELETE FROM Train WHERE numT = 1241 ;

2.b.

L'insertion d'un enregistrement dans la table Reservation ne sera pas possible si la valeur de l’attribut numT n’existe pas dans la table Train.

3.a.

SELECT numT FROM Train
WHERE destination = "Lyon"

3.b.

INSERT INTO Reservation
VALUES (1307 , "Turing" , "Alan" , 33 , 654)

3.c.

UPDATE Train
SET horaireArrivee = "08 :11" WHERE numT = 7869

4.

Cette requête donne le nombre de réservations faites au nom de Hopper Grace

5.

SELECT Train.destination , Reservation.prix
FROM Train JOIN Reservation ON Train.numT = Reservation.numT
WHERE Reservation.prenomClient = "Grace" AND Reservation.nomClient = "Hopper"