Numérique et sciences informatiques (spécialité) · TerminaleBac
Modèle relationnel : exercices corrigés de Terminale NSI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- Une base de données relationnelle range l'information dans des tableaux à deux dimensions : les lignes sont des n-uplets (ou enregistrements), les colonnes des attributs.6
- La clé primaire identifie chaque ligne sans ambiguïté ; la clé étrangère pointe vers la clé primaire d'une autre table et relie les tables entre elles.6
- Le schéma (tables, clés, références) vise à limiter la redondance et à garder des données cohérentes.6
- Dans un schéma, la clé primaire se souligne et la clé étrangère se repère au symbole # placé devant son nom.2
- Pour chaque exercice : repère d'abord les tables, puis les clés, puis seulement réponds à la question.
Comment utiliser ces exercices
Ces exercices portent sur le modèle relationnel, le socle de la partie « bases de données » du programme de Terminale. Ils précèdent l'étude du langage SQL : ici, pas de requête à écrire, mais un travail sur la façon dont les données sont organisées avant d'être interrogées. Les exercices de bases de données relationnelles font partie des épreuves écrites de spécialité NSI, où la calculatrice n'est pas autorisée.3
Tous les exemples de cette page sont inventés pour l'occasion. Cherche d'abord seul·e sur papier, ouvre un indice seulement si tu bloques, puis compare avec la correction étape par étape.
Pourquoi ce modèle ? Les idées à relier
Avant 1970, les données étaient souvent organisées selon la machine qui les stockait. Entre 1965 et 1975, le besoin s'est fait sentir de séparer plus nettement la représentation logique des données de leur organisation physique.6 Le modèle relationnel répond à ce besoin : l'utilisateur peut accéder aux informations sans savoir où elles sont stockées ni comment.5
Ce modèle est aujourd'hui l'un des plus utilisés, et le langage SQL est le langage associé aux systèmes de gestion de bases de données qui l'appliquent.5 Il sera l'objet des chapitres suivants.
Les exercices
Exercice 1 Lire une table
Voici la relation eleve d'un lycée fictif :
| id | nom | classe |
|---|---|---|
| 1 | Lina | T1 |
| 2 | Hugo | T2 |
| 3 | Inès | T1 |
| 4 | Sami | T3 |
- Donne le nom de chaque attribut de cette relation.
- Combien y a-t-il de n-uplets ?
- Écris le n-uplet qui correspond à Hugo.
- Combien de valeurs la table contient-elle au total ?
Indice 1
Les attributs sont les noms des colonnes, les n-uplets sont les lignes (sans la ligne d'en-tête).
Indice 2
Pour le total, multiplie le nombre de lignes de données par le nombre de colonnes.
Voir la correction pas à pas
Les colonnes sont
id,nometclasse: ce sont les trois attributs.Il y a quatre lignes de données : la relation contient quatre n-uplets. La ligne d'en-tête ne compte pas, elle donne les noms des attributs.
Le n-uplet de Hugo est (2, Hugo, T2) : une valeur par attribut, dans l'ordre des colonnes.
Chaque n-uplet porte 3 valeurs et il y en a 4 : 4 × 3 = 12 valeurs au total.
Une relation est un tableau : les lignes sont des n-uplets, les colonnes des attributs. Compter proprement les deux évite bien des erreurs dans les exercices suivants.
Exercice 2 Choisir une clé primaire
Une médiathèque fictive stocke la relation livre :
| code | titre | auteur | annee |
|---|---|---|---|
| L01 | Océans | Roux | 2019 |
| L02 | Horizons | Roux | 2019 |
| L03 | Océans | Giraud | 2021 |
| L04 | Brumes | Giraud | 2021 |
- Les attributs
titre,auteuretanneepeuvent-ils servir de clé primaire ? Justifie. - Que penses-tu de
code? - Écris le schéma de la relation en soulignant la clé primaire (utilise le soulignement Markdown ou entoure-la de
_).
Indice 1
Cherche, pour chaque attribut, une valeur qui apparaît plusieurs fois.
Indice 2
Une clé primaire doit identifier chaque ligne, y compris les futures lignes.
Voir la correction pas à pas
titrene convient pas : « Océans » apparaît sur deux lignes différentes. Il ne permet pas d'identifier une ligne de façon unique.auteurne convient pas non plus : Roux et Giraud apparaissent chacun deux fois.anneenon plus : 2019 et 2021 sont répétées.codeprend une valeur différente par ligne, et c'est un identifiant créé exactement pour cela, comme un numéro de série qui est unique pour chaque objet.2 Il convient donc.Schéma : livre(code, titre, auteur, annee).
On choisit comme clé primaire un attribut qui identifie chaque ligne sans ambiguïté. Un identifiant dédié (code, numéro) est le choix le plus sûr, car il reste unique même quand la table grossit.
Exercice 3 Suivre une clé étrangère
Une boutique fictive de matériel de musique utilise deux relations.
marque(_id_, nom)
| id | nom |
|---|---|
| 1 | Aurora |
| 2 | Belcanto |
| 3 | Cordal |
modele(_id_, nom, annee, #id_marque)
| id | nom | annee | id_marque |
|---|---|---|---|
| 10 | Lune | 2015 | 1 |
| 11 | Soleil | 2018 | 2 |
| 12 | Comète | 2020 | 2 |
| 13 | Étoile | 2021 | 3 |
- Quelle est la clé étrangère de
modele? Vers quelle relation et quel attribut pointe-t-elle ? - Quelle est la marque du modèle « Comète » ?
- Combien de modèles de la marque Belcanto la table contient-elle ?
Indice 1
Le symbole # devant un attribut signale une clé étrangère.
Indice 2
Pour la question 3, commence par trouver l'identifiant de Belcanto dans marque, puis compte les lignes de modele qui portent cet identifiant.
Voir la correction pas à pas
Dans
modele, l'attribut#id_marqueest précédé de # : c'est la clé étrangère.2 Elle renvoie à la clé primaireidde la relationmarque.Le modèle « Comète » a pour
id_marquela valeur 2. On cherche 2 dans la colonneiddemarque: c'est Belcanto.Belcanto a pour identifiant 2. Les valeurs de
id_marquedansmodelesont 1, 2, 2, 3 : la valeur 2 apparaît deux fois (Soleil et Comète).Il y a donc 2 modèles de la marque Belcanto.
La clé étrangère évite de recopier le nom de la marque sur chaque modèle : on stocke seulement un numéro, qui renvoie à la ligne correspondante de l'autre table. C'est ainsi que les tables sont reliées.6
Exercice 4 Repérer une redondance
Une association fictive garde toutes ses commandes dans une seule relation :
commande(_num_, client, adresse_client, produit)
| num | client | adresse_client | produit |
|---|---|---|---|
| 1 | Ana | 4 rue des Lilas | Bougie |
| 2 | Ana | 4 rue des Lilas | Savon |
| 3 | Bilal | 12 allée du Parc | Thé |
| 4 | Bilal | 12 allée du Parc | Miel |
| 5 | Bilal | 12 allée du Parc | Savon |
| 6 | Chloé | 7 place Verte | Thé |
- Quelle information est répétée inutilement ?
- Quel risque cela fait-il courir quand Ana déménage ?
- Propose une décomposition en deux relations reliées par une clé étrangère.
- Combien de fois une adresse est-elle stockée avant, puis après ta décomposition ? Donne le nombre d'adresses économisées.
Indice 1
Regarde les colonnes client et adresse_client : que se passe-t-il à chaque nouvelle commande d'un même client ?
Indice 2
Crée une relation client avec un identifiant, puis remplace les informations du client dans commande par une clé étrangère.
Voir la correction pas à pas
L'adresse d'un client est recopiée à chaque commande : 2 fois pour Ana, 3 fois pour Bilal, 1 fois pour Chloé.
Si Ana déménage, il faut modifier deux lignes. Si on en oublie une, la base contient deux adresses différentes pour la même personne : les données deviennent incohérentes. Réduire la redondance sert justement à préserver la cohérence.6
Décomposition : client(id, nom, adresse) et commande(num, #id_client, produit). Chaque client n'est décrit qu'une fois, et chaque commande renvoie à lui par
#id_client.Avant, l'adresse était stockée une fois par commande : 6 fois. Après, une fois par client : 3 fois. On économise 6 − 3 = 3 adresses.
Quand une même information se répète sur plusieurs lignes, c'est le signe qu'elle appartient à un autre sujet et mérite sa propre table. Le schéma d'une base relationnelle est pensé pour limiter ce genre de répétition.6
Exercice 5 Accepter ou refuser une insertion
Deux relations fictives décrivent des auteurs et leurs livres :
auteur(_id_, nom)
| id | nom |
|---|---|
| 1 | Roux |
| 2 | Giraud |
livre(_id_, titre, #id_auteur)
| id | titre | id_auteur |
|---|---|---|
| 1 | Océans | 1 |
| 2 | Brumes | 2 |
| 3 | Rivages | 1 |
On tente quatre insertions, indépendantes les unes des autres :
- (a) dans
livre: (5, Dunes, 2) - (b) dans
livre: (6, Forêts, 9) - (c) dans
livre: (3, Marais, 1) - (d) dans
auteur: (2, Martin)
Pour chacune, dis si elle respecte les clés. Combien d'insertions sont acceptables ?
Indice 1
Pour une clé primaire, la valeur proposée existe-t-elle déjà dans la table ?
Indice 2
Pour une clé étrangère, la valeur proposée existe-t-elle déjà comme clé primaire de la table visée ?
Voir la correction pas à pas
(a) L'identifiant 5 n'existe pas dans
livre, et l'auteur 2 existe dansauteur. Les deux clés sont respectées : l'insertion est acceptable.(b) L'identifiant 6 est libre, mais
id_auteurvaut 9 et aucun auteur n'a cet identifiant : la clé étrangère renverrait à rien. Insertion refusée.(c) L'identifiant 3 existe déjà dans
livre(Rivages) : deux lignes auraient la même clé primaire, ce qui empêcherait de les distinguer. Insertion refusée.(d) L'identifiant 2 est déjà celui de Giraud dans
auteur: même problème qu'en (c). Insertion refusée.Une seule insertion est acceptable : la (a).
Deux règles à vérifier systématiquement : une clé primaire ne se répète jamais, et une clé étrangère doit désigner une ligne qui existe dans la table visée.
Exercice 6 Concevoir un schéma
Un club de sport fictif veut gérer :
- ses adhérents (nom, prénom) ;
- ses activités (nom, jour de la semaine) ;
- les inscriptions des adhérents aux activités, avec la date d'inscription.
Un adhérent peut suivre plusieurs activités, et une activité accueille plusieurs adhérents.
- Propose un schéma relationnel avec trois relations. Souligne les clés primaires et marque les clés étrangères avec #.
- Pourquoi ne faut-il pas ranger la liste des activités dans une seule cellule de la table des adhérents ?
- Écris deux lignes d'exemple pour chaque relation, de façon que les clés étrangères soient cohérentes.
Indice 1
Une troisième table peut servir uniquement à relier les deux autres : chaque ligne représente une inscription.
Indice 2
Dans la relation d'inscription, il faudra deux clés étrangères.
Voir la correction pas à pas
Schéma : adherent(id, nom, prenom) ; activite(id, nom, jour) ; inscription(id, #id_adherent, #id_activite, date_inscription).
La relation
inscriptionporte les liens : chaque ligne associe un adhérent et une activité. Ses deux clés étrangères renvoient aux clés primaires deadherentet deactivite, comme les liens entre tables se font par clé primaire et clé étrangère.6Ranger plusieurs activités dans une seule cellule casserait le principe d'un tableau où chaque case contient une seule valeur : on ne pourrait plus retrouver proprement les adhérents d'une activité. Avec une ligne par inscription, chaque information est à sa place.
Exemple : adherent (1, Lopez, Marie) et (2, Petit, Karim) ; activite (1, Natation, mardi) et (2, Escalade, jeudi) ; inscription (1, 1, 1, 2026-09-10) et (2, 2, 1, 2026-09-12). Toutes les valeurs de
id_adherentetid_activiteexistent bien dans les tables visées.
Concevoir un schéma, c'est découper l'information par sujet, donner à chaque table une clé primaire, puis relier les tables par des clés étrangères. L'objectif est de limiter la redondance et de garder des données cohérentes.6
Les questions qu'on se pose
Pourquoi ne pas tout mettre dans une seule grande table ?
Parce que la même information serait recopiée sur de nombreuses lignes. Cette redondance coûte de la place et, surtout, menace la cohérence : en corrigeant une copie et pas les autres, on obtient des données contradictoires. Le schéma d'une base relationnelle est justement conçu pour réduire la redondance et maximiser la cohérence.6 On découpe donc par sujet et on relie les tables par des clés.
Une clé primaire peut-elle être un nom ou une date ?
Techniquement, tout attribut dont les valeurs ne se répètent pas pourrait jouer ce rôle, mais c'est risqué : deux personnes peuvent porter le même nom, deux événements avoir la même date. On préfère un identifiant dédié, comme un numéro de série, qui est unique pour chaque objet décrit.2 Dans un schéma, la clé primaire se souligne.2
Que dois-je savoir sur le modèle relationnel pour l'épreuve écrite de NSI ?
Les sujets comportent régulièrement un exercice consacré aux bases de données relationnelles et au langage SQL, dans une épreuve de 3 h 30 sans calculatrice.3 Il faut donc savoir lire un schéma, repérer clés primaires et clés étrangères, et comprendre comment les tables se relient avant d'écrire des requêtes. Ces exercices sont la préparation directe aux chapitres sur SQL.
Sources
Programme visé : Programmes et ressources en Numérique et Sciences Informatiques - voie générale - Terminale · Éduscol / Ministère de l'Éducation nationale
- Programmes et ressources en Numérique et Sciences Informatiques - voie générale - Terminale, Éduscol / Ministère de l'Éducation nationale. Consulté le 7 novembre 2026.
- Baccalauréat général 2025 : NSI, Ministère de l'Éducation nationale. Consulté le 7 novembre 2026.
- Spécialité NSI - Ressources Éduscol STI, Éduscol. Consulté le 7 novembre 2026.
- DIU EIL - Diplôme Inter-Universitaire Enseigner l'Informatique au Lycée, Université Grenoble-Alpes. Consulté le 7 novembre 2026.
- Modèle relationnel, Wikipédia. Consulté le 7 novembre 2026.
- Base de données relationnelle, Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.