Loading
Loading
Ce thème de spécialité présente le modèle relationnel — une base de données vue comme un ensemble de relations (tables) reliées par des clés — et son outil d'interrogation et de mise à jour : le langage SQL. On y apprend à lire un schéma relationnel, à garantir la cohérence des données par les contraintes d'intégrité, à comprendre les services d'un SGBD, puis à écrire des requêtes SELECT (sélection, projection, jointure, tri, agrégation) et des requêtes de mise à jour (INSERT, UPDATE, DELETE). C'est un thème entièrement au programme de l'épreuve écrite de terminale.
5sectionsca. 21min de lecture4compétencesNiveauBase 1 · Standard 3 · Approfondissement 1Vérifié · 06/2026
niveau de base
Maîtriser d'abord le vocabulaire du modèle relationnel, savoir repérer clés primaires/étrangères sur un schéma, et écrire les requêtes SELECT simples (un seul SELECT … FROM … WHERE … ORDER BY) ainsi que les trois requêtes de mise à jour.
niveau approfondi
Savoir composer une jointure de plusieurs tables, regrouper et agréger avec GROUP BY/HAVING, raisonner sur la cohérence des contraintes d'intégrité lors des suppressions, et expliquer précisément les services d'un SGBD (transactions, accès concurrents).
Lesetiefe: Approfondi
Schriftgröße: Standard
Anatomie d'une relation : attributs, n-uplets et domaines
Notation d'un schéma de relation
On note le nom de la relation suivi de ses attributs entre parenthèses. L'attribut souligné (ici id) désigne la clé primaire. C'est l'intension : la structure, indépendante des lignes réellement stockées.
On donne la relation livre(isbn, titre, annee, id_auteur). On affiche trois n-uplets : (978-2070, 'Candide', 1759, 7), (978-2253, 'Germinal', 1885, 12), (978-2070, 'Zadig', 1747, 7). Nommez la relation, ses attributs, proposez un domaine pour chacun, et indiquez combien de n-uplets sont présents. Y a-t-il un problème ?
La relation s'appelle livre. Ses attributs (colonnes) sont isbn, titre, annee et id_auteur. C'est l'intension (le schéma) ; les trois lignes affichées sont l'extension (les données).
isbn : chaîne de caractères (le tiret et les chiffres en font un identifiant texte, pas un nombre). titre : chaîne de caractères. annee : entier. id_auteur : entier (il référencera plus tard un auteur).
Trois lignes sont affichées, mais deux portent le même isbn 978-2070 pour deux titres différents (« Candide » et « Zadig »). Si isbn est censé identifier de façon unique un livre, ces deux n-uplets violent l'unicité attendue de cet identifiant : isbn ne peut pas servir de clé primaire telle quelle.
Résultat : Relation livre, quatre attributs (isbn : texte ; titre : texte ; annee : entier ; id_auteur : entier), trois n-uplets affichés. Anomalie : l'isbn 978-2070 apparaît deux fois pour deux livres distincts — il ne peut donc pas faire office de clé primaire, qui doit être unique.
Erreurs fréquentes
Révision active
Un club sportif veut gérer ses adhérents et les activités auxquelles ils sont inscrits. Proposez un schéma relationnel : nommez les relations, listez leurs attributs et indiquez pour chacun un domaine plausible. Repérez ensuite, dans votre schéma, ce qui relèvera plus tard d'une clé primaire.
Rappel actif
Rappelle-toi les points clés — puis révèle.
Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)
Lien clé primaire ↔ clé étrangère entre deux relations
Intégrité référentielle (formalisée)
Toute valeur de la clé étrangère id_auteur d'un n-uplet de livre doit appartenir à l'ensemble des clés primaires existantes de auteur (ou valoir NULL si c'est autorisé). C'est la règle que vérifie le SGBD à chaque insertion ou modification.
On a auteur(id, nom) et livre(isbn, titre, id_auteur), id_auteur étant clé étrangère vers auteur.id. auteur contient les id 7 et 12. On tente : (1) insérer livre('978-1', 'Essai', 99) ; (2) supprimer l'auteur 7 alors que le livre '978-1' (s'il existait) ou tout autre livre le référence. Pour chaque cas, dites la contrainte concernée et le verdict du SGBD.
On insère un livre avec id_auteur = 99. Or aucun auteur n'a l'id 99 (seuls 7 et 12 existent). La clé étrangère pointerait vers une clé primaire inexistante : c'est une violation de l'intégrité référentielle.
Le SGBD refuse l'insertion. Pour qu'elle réussisse, il faudrait d'abord insérer l'auteur 99 dans auteur, puis insérer le livre.
On veut supprimer l'auteur 7. Si au moins un livre porte id_auteur = 7, supprimer l'auteur laisserait ces livres avec une clé étrangère pointant vers un n-uplet disparu : ce serait à nouveau une violation de l'intégrité référentielle.
Tant que des livres référencent l'auteur 7, le SGBD refuse la suppression (sauf politique ON DELETE particulière). Il faut d'abord traiter les livres concernés (les supprimer ou réaffecter leur id_auteur).
Résultat : (1) Insertion refusée : id_auteur = 99 n'existe pas dans auteur (intégrité référentielle). (2) Suppression de l'auteur 7 refusée tant qu'un livre le référence (intégrité référentielle). Dans les deux cas, c'est le SGBD qui fait respecter automatiquement la contrainte.
Erreurs fréquentes
Révision active
On a auteur(id, nom) et livre(isbn, titre, id_auteur) où id_auteur est une clé étrangère vers auteur.id. La table auteur contient les id 7 et 12. On tente : (1) d'insérer livre('978-1', 'Essai', 99) ; (2) de supprimer l'auteur 7 alors qu'un livre le référence. Pour chaque opération, dites quelle contrainte est en jeu et si l'opération est acceptée.
Rappel actif
Rappelle-toi les points clés — puis révèle.
Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)
Le SGBD, intermédiaire offrant quatre services autour de la base
Pour une billetterie en ligne, identifiez le service du SGBD mobilisé dans chacune de ces situations : (a) deux clients tentent au même instant d'acheter le dernier siège ; (b) après une coupure de courant, on doit retrouver toutes les ventes validées ; (c) une recherche par numéro de commande doit répondre instantanément sur des millions de lignes ; (d) seul un administrateur peut consulter les coordonnées bancaires.
Deux écritures concurrentes sur la même donnée : c'est la gestion des accès concurrents. Via une transaction, le SGBD sérialise les opérations pour qu'un seul des deux clients obtienne le siège, sans double vente.
Les données doivent survivre à l'arrêt brutal de la machine : c'est la persistance (écriture durable sur disque), renforcée par la sécurisation (journalisation/reprise après panne) qui garantit qu'une vente validée n'est pas perdue.
Répondre vite sur un gros volume relève de l'efficacité : le SGBD utilise un index sur le numéro de commande pour ne pas parcourir toute la table.
Restreindre l'accès à certaines données selon l'utilisateur relève de la sécurisation (gestion des droits d'accès).
Résultat : (a) accès concurrents ; (b) persistance (et sécurisation) ; (c) efficacité (indexation) ; (d) sécurisation (droits d'accès). Ces quatre situations illustrent les quatre services attendus d'un SGBD relationnel.
Erreurs fréquentes
Révision active
Une billetterie en ligne vend des places de concert. Décrivez, pour chacun des quatre services d'un SGBD (persistance, accès concurrents, efficacité, sécurisation), une situation où ce service est indispensable au bon fonctionnement de la billetterie.
Rappel actif
Rappelle-toi les points clés — puis révèle.
Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)
Une jointure : combiner livre et auteur sur la clé
Compter les livres par auteur (1/3)
On projette le nom de l'auteur et le nombre de livres associés ; AS nb nomme la colonne calculée par l'agrégat COUNT(*).
Compter les livres par auteur (2/3)
La jointure rapproche chaque livre de son auteur via l'égalité clé étrangère = clé primaire (l.id_auteur = a.id).
Compter les livres par auteur (3/3)
On regroupe par auteur pour que COUNT(*) compte les livres de chacun, puis on trie du plus prolifique au moins prolifique.
COUNT(*) de livres par auteur (jeu d'exemple)
Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur), écrivez : (1) les titres des livres parus après 1850, triés par année croissante ; (2) le titre de chaque livre avec le nom de son auteur ; (3) le nombre de livres par auteur, du plus prolifique au moins prolifique.
Projection sur titre (et annee pour le tri), sélection des lignes telles que annee > 1850, tri croissant par annee.
On relie chaque livre à son auteur par l'égalité clé étrangère = clé primaire, puis on projette le titre et le nom.
On joint livre et auteur, on regroupe par auteur, on compte les livres de chaque groupe avec COUNT(*), puis on trie ce comptage par ordre décroissant.
Avec Candide (id_auteur 7) et Zadig (id_auteur 7) pour Voltaire, et Germinal (id_auteur 12) pour Zola : Voltaire totalise 2 livres, Zola 1. La requête renvoie donc (Voltaire, 2) puis (Zola, 1) grâce au tri décroissant.
Résultat : (1) renvoie les titres d'après-1850 triés par année ; (2) apparie chaque titre à son auteur par la jointure ; (3) renvoie (Voltaire, 2) puis (Zola, 1). La clé du sujet est de joindre sur l.id_auteur = a.id, puis de regrouper par auteur avant d'agréger.
Une requête d'interrogation suit toujours le même squelette : SELECT pour les colonnes, FROM pour les tables, WHERE pour filtrer les lignes, ORDER BY pour trier. Lisons-la dans cet ordre.
Deux mots clés à ne jamais confondre : la projection choisit les colonnes, juste après SELECT ; la sélection choisit les lignes, dans la clause WHERE. L'une agit verticalement, l'autre horizontalement.
Pour relier deux tables, on joint sur l'égalité clé étrangère égale clé primaire. Ici l'identifiant d'auteur du livre rejoint l'identifiant de la table auteur : chaque livre retrouve son auteur.
Jointure sur l'égalité clé étrangère = clé primaire
Enfin, pour compter ou totaliser, on regroupe avec GROUP BY puis on agrège avec COUNT, SUM ou AVG. Compter les livres par auteur donne, sur notre exemple, Voltaire deux, Zola un.
COUNT(*) de livres par auteur
Erreurs fréquentes
Révision active
Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur), écrivez les requêtes SQL pour : (1) les titres des livres parus après 1850, triés par année croissante ; (2) le titre de chaque livre accompagné du nom de son auteur ; (3) le nombre de livres écrits par chaque auteur, du plus prolifique au moins prolifique.
Rappel actif
Rappelle-toi les points clés — puis révèle.
Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)
Les trois opérations de mise à jour sur une table
Insertion d'un n-uplet
On ajoute un auteur en précisant explicitement les colonnes ; la valeur de la clé primaire id doit être unique et non NULL.
Modification ciblée par la clé primaire
La clause WHERE isbn = '978-9' garantit qu'un seul livre est modifié ; sans elle, l'année de tous les livres serait écrasée.
Suppression conditionnelle
Seuls les livres dont l'année est strictement antérieure à 1800 sont supprimés ; toutes les autres lignes sont conservées.
Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur) : (1) ajoutez l'auteur (20, 'Hugo') ; (2) ajoutez ('978-9', 'Les Misérables', 1862, 20) ; (3) corrigez son année en 1869 ; (4) supprimez tous les livres parus avant 1800. Justifiez l'ordre (1) puis (2).
On crée d'abord l'auteur, car le livre y fera référence par sa clé étrangère.
Maintenant que l'auteur 20 existe, la clé étrangère id_auteur = 20 satisfait l'intégrité référentielle.
On cible le seul livre concerné par sa clé primaire isbn, et on remplace l'année.
La condition WHERE annee < 1800 limite la suppression aux seules lignes voulues ; le livre de 1869 n'est pas touché.
Si l'on insérait le livre avant l'auteur, sa clé étrangère id_auteur = 20 pointerait vers un auteur inexistant : l'intégrité référentielle serait violée et le SGBD refuserait l'insertion. On crée donc toujours la ligne référencée avant la ligne qui la référence.
Résultat : Les quatre requêtes s'écrivent INSERT / INSERT / UPDATE / DELETE avec, à chaque mise à jour ciblée, une clause WHERE sur la clé primaire ou sur la condition voulue. L'ordre (1) avant (2) est imposé par l'intégrité référentielle : l'auteur doit exister avant le livre qui le référence.
Erreurs fréquentes
Révision active
Avec auteur(id, nom) et livre(isbn, titre, annee, id_auteur) : (1) ajoutez l'auteur (id 20, nom 'Hugo') ; (2) ajoutez le livre ('978-9', 'Les Misérables', 1862, 20) ; (3) corrigez l'année du livre d'isbn '978-9' en 1869 ; (4) supprimez tous les livres parus avant 1800. Indiquez aussi pourquoi l'ordre des étapes (1) puis (2) est important.
Rappel actif
Rappelle-toi les points clés — puis révèle.
Sources : Programme de spécialité Numérique et sciences informatiques — classe terminale (BO spécial n° 8 du 25 juillet 2019) (Ministère de l'Éducation nationale — Éduscol)
Références et sources
Ministère de l'Éducation nationale — Éduscol