Exercice 1 · Bac Numérique et Sciences Informatiques Amérique du Nord 2022 (jour 1)
Thème : Bases de données relationnelles, SGBD et langage SQL · Tiré du sujet Jour 1 (2022)
Énoncé
Cet exercice porte sur les bases de données relationnelles et le langage SQL.
L'énoncé de cet exercice utilise les mots du langage SQL suivants:
SELECT, FROM, WHERE, JOIN, INSERT INTO, VALUES, UPDATE, SET, COUNT
On rappelle qu'en SQL, la fonction d'agrégation COUNT permet de compter le nombre d'enregistrements dans une table.
L'entreprise « Vacances autrement » propose des séjours d'une durée d'une semaine dans différentes stations situées en France. Les séjours sont organisés autour d'une seule activité sportive. Par exemple, la station « La Tramontane Catalane » située à Leucate propose une formule autour de la planche à voile. Les clients pourront durant toute la durée du séjour pratiquer ce sport: le matériel est fourni et deux sessions encadrées par des moniteurs diplômés sont organisées chaque journée. Cette même station propose aussi des séjours pour les amateurs de kitesurf.
Les réservations se font par l'intermédiaire d'un site internet: chaque client complète un formulaire avec ses données personnelles (nom, prénom...) et choisit le séjour souhaité.
Ce site s'appuie sur une base de données relationnelle. Elle contient notamment les relations Station, Sport, Client et Sejour.
Voici le schéma relationnel où les clefs primaires sont soulignées et les clefs étrangères sont suivies du symbole #:
Station ( nomStation, ville, region)
Sport ( nomSport, nomStation#, prix)
Client ( cID, nom, prenom, mail)
Sejour ( cID, semaine, annee, nomStation#, nomSport#)
Les différentes stations sont stockées dans la relation Station. Chaque station est identifiée par un nom caractéristique ( nomStation). Les attributs ville et region permettent de décrire la localisation de chacune des stations.
La relation Sport fait le lien entre les stations et les activités sportives qui y sont proposées. Les trois attributs sont nomSport, nomStation et prix. L'attribut prix est un nombre entier: il correspond au montant plein tarif (en euros) du séjour d'une semaine dans la station avec le sport associé.
La relation Client caractérise les clients de l'entreprise: ils sont identifiés par un nombre entier ( cID) et décrits par leur nom, prénom et adresse mail.
La relation Sejour permet de lister les séjours auxquels les clients ont participé. Les deux attributs semaine et annee sont des nombres entiers: ils permettent d'identifier le moment où a été effectué chaque séjour ( semaine est le numéro de la semaine pendant laquelle le séjour a été réalisé).
Exemple: un séjour ayant été effectué la semaine numéro 12 de l'année 2020 correspond à semaine = 12 et à annee = 2020.
On donne aussi un extrait des trois premières lignes de chacune de ces relations:
Station
nomStation
ville
region
La tramontane catalane
Leucate
Occitanie
La baie sauvage
La Torche
Bretagne
La pinède
Calvi
Corse
Sport
nomSport
nomStation
prix
planche à voile
La tramontane catalane
1200
kitesurf
La tramontane catalane
1100
plongée
La baie sauvage
950
Client
cID
nom
prenom
1
GENEREUX
Eric
eric.genereux@mail.fr
2
PIERRE
Daniel
daniel.pierre@mail.fr
3
JOLY
Emilie
emilie.joly@mail.fr
Sejour
cID
semaine
annee
nomStation
nomSport
1
26
2020
La tramontane catalane
planche à voile
1
38
2020
La tramontane catalane
planche à voile
2
33
2020
La baie sauvage
plongée
1. (a)
Donner la clé primaire et les éventuelles clés étrangères de la relation Sport.
1. (b)
Citer une contrainte d'intégrité de domaine puis une contrainte d'intégrité de relation et enfin une contrainte d'intégrité de référence que doivent respecter les données de la relation Sport.
2. (a)
Le tarif du séjour à la station « La tramontane catalane » basé sur la planche à voile passe de 1 200 euros à 1 350 euros.
La requête SQL suivante a été utilisée pour la mise à jour du tarif:
INSERT INTO Sport VALUES ("planche à voile", "La tramontane catalane", 1350);
Cette requête a été rejetée et la mise à jour n'a pas été effectuée. Après avoir expliqué pourquoi cette requête a été refusée, proposer une requête SQL qui permettra de modifier le tarif de ce séjour.
2. (b)
Une nouvelle station vient d'être référencée. Son nom est « Soleil Rouge ». Elle est située à Bastia en Corse. Des séjours d'une semaine y seront organisés. Le sport pratiqué sera la plongée au tarif de 900 euros.
Écrire les requêtes SQL permettant d'insérer ces nouvelles données dans la base.
3. (a)
L'agence souhaite envoyer un mail d'information à ses clients pour leur présenter cette nouvelle possibilité de séjour mise en place à Bastia. Écrire une requête SQL permettant d'obtenir l'adresse mail de tous les clients.
3. (b)
Un client qui pratique la plongée souhaite réserver un séjour. Écrire une requête SQL permettant d'obtenir le nom de toutes les stations où l'on peut pratiquer la plongée.
4. (a)
Pour faire son choix, le client souhaiterait connaître les villes où sont situées les stations dans lesquelles il pourra pratiquer la plongée.
Écrire une requête SQL permettant d'obtenir le nom des villes ainsi que le nom des stations où l'on peut pratiquer la plongée.
4. (b)
Écrire une requête SQL permettant de déterminer le nombre total de séjours effectués en Corse durant l'année 2020.

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. (a) Donner la clé primaire de la relation Sport.
Réponse : nomSport (ou le couple (nomSport, nomStation))
1. (a) Donner les éventuelles clés étrangères de la relation Sport.
Réponse : nomStation
1. (b) Citer une contrainte d'intégrité de domaine que doivent respecter les données de la relation Sport.
Réponse : L'attribut prix doit être un nombre entier positif (ou nomSport doit être une chaîne de caractères).
1. (b) Citer une contrainte d'intégrité de relation que doivent respecter les données de la relation Sport.
Réponse : Chaque enregistrement doit posséder une clé primaire unique et non nulle (intégrité d'entité).
1. (b) Citer une contrainte d'intégrité de référence que doivent respecter les données de la relation Sport.
Réponse : Toute valeur de la clé étrangère nomStation dans Sport doit exister parmi les clés primaires de la table Station.
2. (a) Expliquer pourquoi la requête INSERT INTO a été refusée.
Réponse : La requête tente d'insérer un enregistrement dont la clé existe déjà, violant la contrainte d'unicité de la clé primaire. Pour modifier un tuple existant, il faut utiliser UPDATE et non INSERT INTO.
Les réponses des 6 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 1 - Partie A · Amérique du Nord 2023 (jour 2) · Exercice 3 · Amérique du Nord 2022 (jour 2) ›
Plus d’exercices de Bases de données relationnelles, SGBD et langage SQL
- Exercice 3 - Partie B : Bases de données · Amérique du Nord 2025 (jour 2 bis)
- Exercice 3 - Partie B · Amérique du Nord 2024 (jour 1)
- Exercice 2 · Amérique du Nord 2024 (jour 2)
- Exercice 1 - Bases de données · Amérique du Nord 2023 (jour 1)
- Exercice 1 - Partie A · Amérique du Nord 2023 (jour 2)
- Exercice 3 · Amérique du Nord 2022 (jour 2)
- Exercice 1 · Amérique du Nord 2021 (jour 1)