🔎 Voir les exercices similaires ↓
Antilles-guyane – Bac NSI 2026 – Jour 2 Énoncé de l'exercice 1
Cet exercice porte sur les bases de données relationnelles, les requêtes SQL et la programmation objet. Cet exercice comporte deux parties indépendantes.
Partie A
Dans cette partie, on pourra utiliser les clauses du langage SQL pour :
construire des requêtes d’interrogation à l’aide de SELECT, FROM, WHERE (avec les opérateurs logiques AND et OR) et JOIN ... ON ;
construire des requêtes d’insertion et de mise à jour à l’aide de UPDATE, INSERT et DELETE ;
faire des alias avec AS ;
affiner les recherches à l’aide de DISTINCT et ORDER BY ;
réaliser des agrégations à l’aide de COUNT, AVG, MAX, MIN et SUM.
Une agence de location d’espaces de travail (coworking) a créé une base de données comprenant les relations suivantes :
salle (id_salle, intitule, type, nb_places, tarif_jour)
reservation (id, id_client, id_salle, date, duree)
client (id_client, societe, num_tel)
On donne ci-dessous des extraits des relations précédentes :
| salle | ||||
| id_salle | intitule | type | nb_places | tarif_jour |
| 1 | B1 | Bureau | 3 | 140 |
| 2 | Ravel | Amphi | 90 | 2300 |
| 3 | RA | Réunion | 10 | 350 |
| 4 | B2 | Bureau | 4 | 155 |
| 5 | RB | Réunion | 8 | 300 |
| reservation | ||||
| id | id_client | id_salle | date | duree |
| 1 | 2 | 3 | 2024-03-24 | 1 |
| 2 | 1 | 1 | 2023-12-17 | 1 |
| 3 | 2 | 3 | 2024-04-16 | 2 |
| 4 | 1 | 4 | 2024-02-05 | 1 |
| client | ||
| id_client | societe | num_tel |
| 1 | Dupont&co. | 0812121212 |
| 2 | FleursJ | 0950505050 |
L’attribut id_salle de la relation salle, l’attribut id de la relation reservation et l’attribut id_client de la relation client sont des clés primaires.
Donner, en justifiant, les clés étrangères de la relation reservation.
Donner le résultat de la requête suivante, quand on l’applique aux extraits donnés des tables.
SELECT intitule FROM salle WHERE nb_places > 5
ORDER BY tarif_jour;
Écrire une requête permettant d’obtenir la liste sans doublon des id_salle des salles réservées depuis janvier 2024. On pourra utiliser le comparateur > pour les dates.
Un nouveau client de nom de société ‘EN’ et de numéro de téléphone ‘0144624055’ a réservé le bureau d’identifiant 4 pour une journée le 12 juin 2024.
Écrire une suite de requêtes permettant d’ajouter ce client et sa réservation. On attribuera la valeur 3 à id_client et la valeur 5 à id.
La salle ‘RAVEL’ a été modifiée, elle peut maintenant contenir 95 personnes.
Écrire la requête permettant d’enregistrer cette modification dans la base de données précédente.
Écrire une requête permettant d’obtenir le temps total de réservation de la salle d’identifiant 6.
Écrire une requête permettant d’obtenir la liste sans doublon des noms de société ayant réservé une salle de réunion.
Partie B
On implémente maintenant ces données sous la forme d’une classe en Python donnée ci-dessous. Pour simplifier le code, on considère qu’il n’y a plus de date de réservation mais simplement un état de disponibilité. Lorsqu’une salle est disponible, l’attribut occupant prend pour valeur la chaîne vide.
class Salle:
def __init__(self, intitule, type_salle, nb_places,
tarif_jour):
self.intitule = intitule
self.type_salle = type_salle
self.nb_places = nb_places
self.tarif = tarif_jour
self.dispo = True
self.occupant = ""
def reserver(self, client):
if self.dispo:
self.dispo = False
self.occupant = client
return self.tarif
return False
Donner un exemple d’attribut et un exemple de méthode de la classe Salle.
Écrire la méthode liberer qui modifie les attributs d’une salle de manière à la rendre disponible et sans occupant (chaîne de caractères vide).
Le code suivant crée et modifie une liste de salles :
S1 = Salle("B1", "Bureau", 3, 140)
S2 = Salle("RAVEL", "Amphi", 90, 2300)
S3 = Salle("RA", "Réunion", 10, 350)
S4 = Salle("B2", "Bureau", 4, 155)
S5 = Salle("RB", "Réunion", 8, 300)
S1.reserver("Dupont&co")
S2.reserver("FleursJ")
liste_salles = [S1,S2,S3,S4,S5]
Recopier et compléter les lignes 3, 4 et 5 du code de la fonction salles_dispos qui prend en paramètre une liste de salles et renvoie la liste des intitulés de celles qui sont disponibles.
def salles_dispos(liste_salles):
res = []
for ...: # ligne 3
if ...: # ligne 4
res.append(...) # ligne 5
return res
On crée maintenant une classe Seminaire ayant pour attributs une liste de salles réservées, un prix total et un nom de client.
class Seminaire:
def __init__(self, client):
self.liste_salles = []
self.prix_total = 0
self.client = client
def ajouter_reservation(self, salle):
if salle.dispo:
... # ligne 8
... # ligne 9
return True
return False
Recopier et compléter la méthode ajouter_reservation qui ajoute salle à la liste des salles réservées, puis réserve cette salle en modifiant le prix total. Elle renvoie True si la salle a pu être réservée car elle était libre, et False sinon.
Antilles-guyane – Bac NSI 2026 – Jour 2 Correction de l'exercice 1
Partie A – Base de données
1. Clés étrangères de reservation
id_client est une clé étrangère qui référence la clé primaire id_client de la relation client, et id_salle est une clé étrangère qui référence la clé primaire id_salle de la relation salle.
Elles permettent de relier chaque réservation au client qui l’a faite et à la salle réservée : leurs valeurs doivent exister dans les tables référencées.
2. Résultat de la requête
| intitule |
|---|
| RB |
| RA |
| Ravel |
3. Salles réservées depuis janvier 2024
SELECT DISTINCT id_salle
FROM reservation
WHERE date > '2023-12-31';
4. Ajout du client et de sa réservation
INSERT INTO client VALUES (3, 'EN', '0144624055');
INSERT INTO reservation VALUES (5, 3, 4, '2024-06-12', 1);
Le client doit être ajouté en premier : la clé étrangère id_client de la réservation doit référencer un client existant.
5. Nouvelle capacité de la salle Ravel
UPDATE salle
SET nb_places = 95
WHERE id_salle = 2;
6. Temps total de réservation de la salle 6
SELECT SUM(duree)
FROM reservation
WHERE id_salle = 6;
7. Sociétés ayant réservé une salle de réunion
SELECT DISTINCT client.societe
FROM client
JOIN reservation ON client.id_client = reservation.id_client
JOIN salle ON reservation.id_salle = salle.id_salle
WHERE salle.type = 'Réunion';
Partie B – Programmation objet
8. Un attribut et une méthode
Attribut : par exemple nb_places (ou intitule, type_salle, tarif, dispo, occupant).
Méthode : reserver (ou le constructeur __init__).
9. Méthode liberer
def liberer(self):
self.dispo = True
self.occupant = ""
10. Fonction salles_dispos
def salles_dispos(liste_salles):
res = []
for salle in liste_salles: # ligne 3
if salle.dispo: # ligne 4
res.append(salle.intitule) # ligne 5
return res
11. Méthode ajouter_reservation
def ajouter_reservation(self, salle):
if salle.dispo:
self.liste_salles.append(salle)
self.prix_total = self.prix_total + salle.reserver(self.client)
return True
return False
Une erreur, un oubli ? Écrivez-moi : frederic.peuriere@lfcl.pt
🔎 Exercices sur des thèmes similaires
-
Polynésie 2025 – jour 2 – exercice 2
programmation, POO, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Asie 2024 – jour 1 – exercice 3
programmation, POO, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Nouvelle Calédonie 2025 – jour 1 – exercice 2
BDD, SQL , POO — Difficulté : 🔥🔥🔥🔥🔥 -
Centres étrangers 2024 – jour 1 – exercice 3
programmation, POO, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Asie 2025 – jour 2 – exercice 3
POO, BDD, SQL, arbres binaires — Difficulté : 🔥🔥🔥🔥🔥 -
Sujet Zéro 2024 – jour 2 – exercice 3
dictionnaires, POO, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥