🔎 Voir les exercices similaires ↓
Antilles-guyane – Bac NSI 2026 – Jour 1 Énoncé de l'exercice 1
Cet exercice porte sur le modèle relationnel, les systèmes de gestion de bases de données relationnelles et le langage SQL.
Le restaurant Pizzayolo cherche à moderniser son système de réservation de pizzas et fait appel à un prestataire informatique qui lui propose d’utiliser un système de gestion de bases de données relationnelles.
Donner deux avantages que peut apporter un système de gestion de bases de données par rapport à l’utilisation d’un simple tableur dans lequel on ajouterait chaque nouvelle commande sur une ligne.
Le prestataire propose une base de données constituée de trois relations selon le schéma relationnel suivant, les clés primaires des tables étant soulignées.
client(id : entier, nom : texte, prenom : texte)
pizza(num : entier, couleur : texte, prix : flottant)
commande(code : entier, id_client : entier, num_pizza : entier, date : texte, livraison : entier, paiement : entier)
Voici un extrait des tables client, pizza et commande :
| client | ||
| id | nom | prenom |
| 103 | Esposito | Giulia |
| 106 | Panzini | Raffaele |
| pizza | ||
| num | couleur | prix |
| 1 | Rossa | 11.5 |
| 2 | Bianca | 11.5 |
| 3 | Nera | 12.5 |
| 4 | Bianca | 15.5 |
| commande | |||||
| code | id_client | num_pizza | date | livraison | paiement |
| 42362 | 103 | 2 | 2025-01-02 | 1 | 1 |
| 42363 | 103 | 3 | 2025-01-02 | 1 | 1 |
| 42364 | 106 | 1 | 2025-01-03 | 1 | 0 |
| 42365 | 103 | 1 | 2025-01-03 | 0 | 1 |
Chaque pizza commandée par un client donne lieu à une commande différente. Ainsi, un même client peut, par exemple, commander plusieurs pizzas le même jour : ceci se traduit dans la table par plusieurs commandes de codes différents. La pizza d’une commande peut avoir été livrée ou non : l’attribut livraison vaut 1 si la pizza a été livrée et 0 sinon. Le client peut avoir payé sa commande ou non : l’attribut paiement vaut 1 si la commande a été réglée et 0 sinon.
Indiquer, en justifiant, s’il est possible d’avoir deux pizzas avec le même numéro de pizza, le même prix et avec une couleur de pizza différente.
Donner un exemple de clé étrangère en précisant la relation à laquelle elle appartient ainsi que l’attribut et la relation qu’elle référence.
Dans cet exercice, 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, OR), JOIN ... ON ;
construire des requêtes d’insertion et de mise à jour à l’aide de UPDATE, INSERT, DELETE ;
affiner les recherches à l’aide de DISTINCT, ORDER BY.
Les fonctions d’agrégation COUNT(attribut), AVG(attribut), MAX(attribut), MIN(attribut) et SUM(attribut) renvoient, respectivement, le nombre, la moyenne, la plus grande, la plus petite et la somme des valeurs de l’attribut sélectionné.
Par exemple, la requête SELECT MAX(prix) FROM pizza; renvoie le prix de la pizza la plus chère et SELECT SUM(livraison) FROM commande; renvoie le nombre total de pizzas qui ont été livrées.
Écrire le résultat renvoyé par la requête SQL suivante, en s’appuyant uniquement sur les extraits des tables fournis précédemment.
SELECT prix FROM pizza WHERE couleur = 'Bianca';
Écrire une requête SQL qui donne les couleurs des pizzas dont le prix est strictement supérieur à 15 €.
Écrire une requête SQL qui donne les prénoms des clients qui n’ont pas payé une pizza qui leur a pourtant été livrée.
Écrire une requête SQL qui donne le prix moyen de vente des pizzas commandées par un client de nom « Esposito ».
La commande de code 42365 vient tout juste d’être livrée.
Écrire une requête SQL qui permet de mettre à jour la base de données en conséquence.
Le 3 janvier 2025, Emanuele Girasole, qui n’a jamais encore commandé dans ce restaurant, souhaite se faire livrer la pizza numéro 2.
Écrire, dans le bon ordre, les requêtes SQL qui permettent de mettre à jour la base de données en conséquence. On suppose que l’identifiant client 107 et que le code de commande 42366 n’ont pas encore été attribués dans la base de données.
La gérante de la pizzéria décide de retirer de la vente la pizza d’identifiant 1 et exécute la requête suivante :
DELETE FROM pizza
WHERE num = 1;
Indiquer le problème que peut poser l’exécution de cette requête.
La gérante aimerait que l’on ajoute dans la base de données un moyen de retrouver les ingrédients utilisés pour chaque pizza. Chaque pizza comporte divers ingrédients et un même ingrédient peut être utilisé sur plusieurs pizzas. Il est donc nécessaire de proposer un nouveau schéma relationnel en ajoutant deux relations : une table ingredient et une table composition qui permet de faire le lien entre les ingrédients et les pizzas.
Écrire le schéma relationnel des deux nouvelles tables en indiquant clairement les clés primaires et les clés étrangères.
Afin de pouvoir permettre à chaque client de consulter sur Internet l’historique de ses commandes, le prestataire propose de mettre la base de données sur un serveur accessible par des requêtes extérieures et non uniquement via le réseau interne utilisé par le restaurant.
Indiquer les problèmes soulevés par cette démarche et les précautions à prendre pour y remédier.
Antilles-guyane – Bac NSI 2026 – Jour 1 Correction de l'exercice 1
1. Avantages d’un SGBD sur un tableur
Par exemple (deux suffisent) :
cohérence et intégrité des données : clés primaires et étrangères, types imposés, pas de doublon ni de commande qui renverrait à un client inexistant ;
pas de redondance : le nom du client ou le prix de la pizza sont stockés une seule fois, et non recopiés à chaque commande ;
accès simultanés de plusieurs utilisateurs sans conflit, gestion des droits et sécurité ;
requêtes puissantes (SQL) pour rechercher, trier, regrouper, même sur un très grand nombre de commandes.
2. Deux pizzas avec le même numéro ?
Non. L’attribut num est la clé primaire de la relation pizza : sa valeur identifie une pizza de façon unique, deux lignes ne peuvent pas avoir le même num, quels que soient leur prix et leur couleur.
3. Une clé étrangère
Dans la relation commande, l’attribut id_client est une clé étrangère qui référence l’attribut id de la relation client.
Autre réponse possible : dans commande, num_pizza référence l’attribut num de la relation pizza.
4. Résultat de la requête
| prix |
|---|
| 11.5 |
| 15.5 |
5. Couleurs des pizzas à plus de 15 €
SELECT couleur
FROM pizza
WHERE prix > 15;
6. Clients livrés qui n’ont pas payé
SELECT DISTINCT client.prenom
FROM client
JOIN commande ON client.id = commande.id_client
WHERE commande.livraison = 1 AND commande.paiement = 0;
7. Prix moyen des pizzas commandées par Esposito
SELECT AVG(pizza.prix)
FROM pizza
JOIN commande ON pizza.num = commande.num_pizza
JOIN client ON client.id = commande.id_client
WHERE client.nom = 'Esposito';
8. La commande 42365 est livrée
UPDATE commande
SET livraison = 1
WHERE code = 42365;
9. Nouveau client et sa commande
INSERT INTO client VALUES (107, 'Girasole', 'Emanuele');
INSERT INTO commande VALUES (42366, 107, 2, '2025-01-03', 0, 0);
Il faut d’abord créer le client, puis la commande : la clé étrangère id_client de la commande doit référencer un client qui existe déjà.
10. Problème posé par la suppression
Des commandes (42364 et 42365) référencent la pizza numéro 1 par la clé étrangère num_pizza. La supprimer violerait la contrainte d’intégrité référentielle : ces commandes renverraient à une pizza qui n’existe plus. Le SGBD refuse donc la suppression (ou, sans contrôle, la base devient incohérente).
11. Schéma des deux nouvelles tables
ingredient(id_ingredient : entier, nom : texte)
composition(#num_pizza : entier, #id_ingredient : entier)
La clé primaire de composition est le couple (num_pizza, id_ingredient) ; num_pizza est une clé étrangère qui référence pizza.num et id_ingredient une clé étrangère qui référence ingredient.id_ingredient.
12. Base accessible depuis Internet
Problèmes : la base devient exposée aux attaques (intrusion, vol ou modification des données, injections SQL), et elle contient des données personnelles (noms, commandes) protégées par le RGPD. Un client ne doit voir que ses propres commandes.
Précautions :
authentification des clients (identifiant et mot de passe stocké haché) et droits limités (lecture seule de leurs commandes) ;
communications chiffrées (HTTPS) ;
ne pas laisser la base directement accessible : passer par une application web qui utilise des requêtes préparées (contre les injections SQL), derrière un pare-feu ;
sauvegardes régulières et mises à jour de sécurité.
Une erreur, un oubli ? Écrivez-moi : frederic.peuriere@lfcl.pt
🔎 Exercices sur des thèmes similaires
-
Sujet Zéro 2023 – jour 2 – exercice 1
commande Linux, traitement des données en tables, BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Sujet Zéro 2023 – jour 1 – exercice 1
BDD, SQL, types construits — Difficulté : 🔥🔥🔥🔥🔥 -
Nouvelle Calédonie 2023 – jour 2 – exercice 1
BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Nouvelle Calédonie 2023 – jour 1 – exercice 1
BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Centres étrangers 2023 – jour 1 – exercice 1
BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥 -
Centres étrangers 2023 – jour 2 – exercice 2
BDD, SQL — Difficulté : 🔥🔥🔥🔥🔥