1. Les relations entre tables : 1-n et n-n

Tu as découvert en Première la notion de table et de requête simple dans un logiciel de gestion de bases de données comme Access. En Terminale, on franchit une étape : une base de données bien conçue répartit l'information dans plusieurs tables distinctes, reliées entre elles par des relations. Savoir identifier la nature de ces relations est le point de départ de toute conception de base de données.

Définition — Relation un-à-plusieurs (1-n)

Une relation 1-n (« un vers plusieurs ») associe un enregistrement d'une première table à plusieurs enregistrements d'une seconde table, alors que l'inverse n'est pas vrai : un enregistrement de la seconde table ne correspond qu'à un seul enregistrement de la première.

Exemple — Classe → Élèves

Une classe (par exemple « Tle A ») regroupe plusieurs élèves, mais chaque élève n'appartient qu'à une seule classe à la fois. La relation entre la table Classes et la table Élèves est donc une relation 1-n : un enregistrement de Classes correspond à plusieurs enregistrements de Élèves.

Définition — Relation plusieurs-à-plusieurs (n-n)

Une relation n-n (« plusieurs vers plusieurs ») existe lorsque plusieurs enregistrements d'une table peuvent correspondre à plusieurs enregistrements d'une autre table, dans les deux sens. Ce type de relation ne peut pas se représenter directement par une simple clé étrangère : il nécessite une table de liaison (aussi appelée table d'association ou table pivot).

Exemple — Élèves ↔ Matières

Un élève suit plusieurs matières, et une matière est suivie par plusieurs élèves : la relation entre Élèves et Matières est donc une relation n-n. On la modélise à l'aide d'une table de liaison, par exemple Eleves_Matieres, qui ne contient que deux clés étrangères : id_eleve et id_matiere. Chaque ligne de cette table de liaison représente une association « cet élève suit cette matière ».

2. Les clés étrangères

Définition

Une clé étrangère (foreign key) est un champ d'une table qui reprend la valeur de la clé primaire d'une autre table. Elle matérialise concrètement une relation entre deux tables et assure l'intégrité référentielle des données : en principe, on ne peut pas enregistrer un élève rattaché à une classe qui n'existe pas dans la table Classes.

Exemple

Dans la table Élèves, le champ id_classe est une clé étrangère : il contient la valeur de la clé primaire id de la table Classes. Chaque ligne de Élèves « pointe » ainsi vers la classe à laquelle appartient l'élève.

idnomprenomid_classemoyenne
1MbembaGrace214.5
2LoubotaDavid111.2

3. Les requêtes avec jointures simples

Une jointure permet de combiner les données de deux tables (ou plus) en s'appuyant sur une clé commune, en général une clé primaire et sa clé étrangère associée. En SQL, on utilise le mot-clé JOIN suivi de la clause ON, qui précise la condition de correspondance entre les deux tables.

SQLSELECT nom, classes.nom_classe FROM eleves JOIN classes ON eleves.id_classe = classes.id;
Résultat de la jointure
nomnom_classe
MbembaTle D
LoubotaTle A

La jointure a permis d'afficher, pour chaque élève, le nom de sa classe — une information qui n'existe pas directement dans la table eleves, mais que l'on retrouve grâce à la clé étrangère id_classe.

4. Les clauses WHERE et ORDER BY

La clause WHERE filtre les enregistrements selon une condition ; la clause ORDER BY trie le résultat selon une ou plusieurs colonnes, en ordre croissant (ASC, comportement par défaut) ou décroissant (DESC).

SQLSELECT nom, moyenne FROM eleves WHERE moyenne >= 10;
SQLSELECT nom, moyenne FROM eleves ORDER BY nom ASC;
SQLSELECT nom, moyenne FROM eleves ORDER BY moyenne DESC;

Les deux clauses se combinent fréquemment dans une même requête : on filtre d'abord avec WHERE, puis on trie le résultat filtré avec ORDER BY. Lorsque les deux clauses sont présentes, WHERE s'écrit toujours avant ORDER BY.

5. Les formulaires de saisie dans Access

Saisir des données directement dans le mode Feuille de données d'une table est possible, mais peu pratique et peu sûr : toutes les colonnes techniques sont visibles, et rien n'empêche une saisie incohérente. Un formulaire propose une interface conviviale, dédiée à la saisie, à la consultation ou à la modification des enregistrements, un champ à la fois.

Méthode — Créer un formulaire

Onglet Créer → groupe FormulairesAssistant Formulaire. L'assistant guide le choix de la table (ou de la requête) source, des champs à afficher, de la disposition (colonnes simples, tabulaire, justifiée) puis propose un titre pour le formulaire.

Un formulaire peut également intégrer un sous-formulaire : utile lorsqu'on veut afficher, pour un enregistrement donné (une classe, par exemple), tous les enregistrements liés d'une autre table (ses élèves) — en exploitant précisément la relation 1-n étudiée plus haut.

6. Les états et rapports

Définition

Un état (ou rapport) est une présentation mise en forme et imprimable de données issues d'une table ou, le plus souvent, d'une requête. Contrairement au formulaire, destiné à la saisie, l'état est destiné à la consultation et à l'impression : bulletin de notes, liste de classe, relevé de moyennes...

Méthode — Créer un état

Onglet Créer → groupe ÉtatsAssistant État. On y choisit la source (table ou requête), les champs à afficher, les regroupements éventuels (par exemple regrouper les élèves par classe), l'ordre de tri des enregistrements et la mise en page.

7. Les bases du langage SQL

Le SQL (Structured Query Language) est le langage normalisé utilisé pour interroger et manipuler une base de données relationnelle. Quatre commandes fondamentales, regroupées sous le sigle CRUD (Create, Read, Update, Delete), suffisent à manipuler les données d'une table.

SELECT — lire des données

SQLSELECT nom, prenom, moyenne FROM eleves;

INSERT — ajouter un enregistrement

SQLINSERT INTO eleves (nom, prenom, id_classe, moyenne) VALUES ('Nkounkou', 'Prisca', 2, 15.8);

UPDATE — modifier un enregistrement

SQLUPDATE eleves SET moyenne = 12.4 WHERE nom = 'Loubota';

DELETE — supprimer un enregistrement

SQLDELETE FROM eleves WHERE nom = 'Nkounkou';

Par convention, les mots-clés du langage SQL s'écrivent en majuscules et chaque instruction se termine par un point-virgule ;. Attention : une commande UPDATE ou DELETE sans clause WHERE s'applique à tous les enregistrements de la table — une erreur fréquente et souvent irréversible.

8. Requêtes SQL simples : mise en pratique

Reprenons la table eleves(id, nom, prenom, id_classe, moyenne) et la table classes(id, nom_classe) pour combiner sélection, filtre, tri et jointure.

SQLSELECT nom, moyenne FROM eleves WHERE moyenne < 10 ORDER BY moyenne ASC;

Cette requête liste les élèves en difficulté, du plus faible au moins faible.

SQLSELECT nom, prenom, moyenne FROM eleves WHERE id_classe = 2 ORDER BY moyenne DESC;

Cette requête affiche les élèves de la classe n° 2, classés du meilleur au moins bon.

SQLSELECT eleves.nom, classes.nom_classe, eleves.moyenne FROM eleves JOIN classes ON eleves.id_classe = classes.id WHERE eleves.moyenne >= 12 ORDER BY eleves.nom ASC;

Cette dernière requête combine jointure, filtre et tri : elle affiche, par ordre alphabétique, le nom et la classe des élèves ayant au moins 12 de moyenne.

🧠 À retenir

  • Une relation 1-n lie un enregistrement d'une table à plusieurs d'une autre (ex. Classe → Élèves).
  • Une relation n-n nécessite une table de liaison contenant les clés étrangères des deux tables (ex. Élèves ↔ Matières).
  • Une clé étrangère reprend la clé primaire d'une autre table et assure l'intégrité référentielle.
  • Le mot-clé JOIN ... ON ... combine les données de plusieurs tables selon une clé commune.
  • WHERE filtre les enregistrements, ORDER BY les trie (ASC ou DESC).
  • Un formulaire (Créer → Assistant Formulaire) sert à saisir les données ; un état (Créer → Assistant État) sert à les présenter et les imprimer.
  • Les quatre commandes de base du SQL sont SELECT, INSERT, UPDATE et DELETE.
  • Les mots-clés SQL s'écrivent en majuscules, et chaque instruction se termine par un point-virgule.
1

Identifier un type de relation

Facile

Une bibliothèque scolaire gère des livres et des auteurs. Un auteur peut avoir écrit plusieurs livres, mais un livre (dans cette base simplifiée) n'a qu'un seul auteur.

  1. Quel type de relation existe entre la table Auteurs et la table Livres ?
  2. Dans quelle table place-t-on la clé étrangère ?
Correction
  1. Il s'agit d'une relation 1-n : un auteur (1) peut correspondre à plusieurs livres (n), mais un livre ne correspond qu'à un seul auteur.
  2. La clé étrangère se place du côté « n », donc dans la table Livres : un champ id_auteur qui référence la clé primaire id de la table Auteurs.
2

Écrire une requête SELECT avec WHERE

Facile

On dispose de la table eleves(id, nom, prenom, id_classe, moyenne). Écris la requête SQL qui affiche le nom et la moyenne des élèves ayant une moyenne strictement inférieure à 10.

Correction
SQLSELECT nom, moyenne FROM eleves WHERE moyenne < 10;

La clause WHERE moyenne < 10 ne conserve que les lignes où la condition est vraie.

3

Trier un résultat avec ORDER BY

Moyen

Toujours à partir de la table eleves, écris une requête qui affiche le nom, le prénom et la moyenne de tous les élèves, triés de la meilleure à la plus faible moyenne.

Correction
SQLSELECT nom, prenom, moyenne FROM eleves ORDER BY moyenne DESC;

DESC trie en ordre décroissant : la moyenne la plus élevée apparaît en premier.

4

Écrire une jointure entre deux tables

Moyen

On dispose des tables eleves(id, nom, id_classe, moyenne) et classes(id, nom_classe). Écris une requête qui affiche, pour chaque élève ayant au moins 14 de moyenne, son nom et le nom de sa classe.

Correction
SQLSELECT eleves.nom, classes.nom_classe FROM eleves JOIN classes ON eleves.id_classe = classes.id WHERE eleves.moyenne >= 14;

La jointure relie chaque élève à sa classe via la clé étrangère id_classe, puis la clause WHERE filtre les élèves ayant au moins 14 de moyenne.

5

Concevoir le schéma d'une base de données de bibliothèque

Difficile

La bibliothèque de ton lycée souhaite informatiser la gestion des prêts. Elle doit suivre : les livres disponibles, les emprunteurs (élèves ou professeurs) et les emprunts effectués (un emprunteur peut emprunter plusieurs livres au fil du temps, et un livre peut être emprunté par différentes personnes à différentes dates). Propose un schéma relationnel : les tables, leurs champs principaux, les clés primaires et les clés étrangères.

Correction

La relation entre Livres et Emprunteurs est une relation n-n (un livre peut être emprunté par plusieurs personnes au cours du temps, et une personne peut emprunter plusieurs livres) : elle doit passer par une table de liaison, ici Emprunts, qui porte en plus les informations propres à chaque prêt.

  • Livres (id_livre clé primaire, titre, auteur, disponible)
  • Emprunteurs (id_emprunteur clé primaire, nom, prenom, classe)
  • Emprunts (id_emprunt clé primaire, id_livre clé étrangère → Livres, id_emprunteur clé étrangère → Emprunteurs, date_emprunt, date_retour)
SQLCREATE TABLE emprunts ( id_emprunt INTEGER PRIMARY KEY, id_livre INTEGER, id_emprunteur INTEGER, date_emprunt DATE, date_retour DATE, FOREIGN KEY (id_livre) REFERENCES livres(id_livre), FOREIGN KEY (id_emprunteur) REFERENCES emprunteurs(id_emprunteur) );

La table Emprunts joue ici un double rôle : table de liaison entre livres et emprunteurs (relation n-n), et journal des prêts, puisqu'elle conserve l'historique des dates d'emprunt et de retour.

QCM

10 questions · Correction immédiate

0Score
0/10Répondues
Question 1/10
Une classe regroupe plusieurs élèves, mais chaque élève n'appartient qu'à une seule classe. Quel type de relation relie la table Classes à la table Élèves ?
Question 2/10
Un élève suit plusieurs matières et une matière est suivie par plusieurs élèves. Comment modélise-t-on cette relation n-n dans une base de données relationnelle ?
Question 3/10
Quel est le rôle d'une clé étrangère ?
Question 4/10
Dans la table eleves(id, nom, id_classe, moyenne), quel champ est une clé étrangère ?
Question 5/10
Quelle syntaxe SQL permet de relier deux tables dans une même requête ?
Question 6/10
Que produit la requête SQL suivante ?
SQLSELECT eleves.nom, classes.nom_classe FROM eleves JOIN classes ON eleves.id_classe = classes.id;
Question 7/10
Que sélectionne la requête suivante ?
SQLSELECT nom, moyenne FROM eleves WHERE moyenne >= 10;
Question 8/10
Quelle requête affiche les élèves du plus faible au meilleur résultat ?
Question 9/10
Dans Access, quelle est la méthode pour créer un formulaire de saisie ?
Question 10/10
Que réalise la requête SQL suivante ?
SQLUPDATE eleves SET moyenne = 12.4 WHERE nom = 'Loubota';