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.
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.
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.
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).
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 ».
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.
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.
| id | nom | prenom | id_classe | moyenne |
|---|---|---|---|---|
| 1 | Mbemba | Grace | 2 | 14.5 |
| 2 | Loubota | David | 1 | 11.2 |
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.
| nom | nom_classe |
|---|---|
| Mbemba | Tle D |
| Loubota | Tle 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.
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).
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.
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.
Onglet Créer → groupe Formulaires → Assistant 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.
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...
Onglet Créer → groupe États → Assistant É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.
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.
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.
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.
Cette requête liste les élèves en difficulté, du plus faible au moins faible.
Cette requête affiche les élèves de la classe n° 2, classés du meilleur au moins bon.
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.
JOIN ... ON ... combine les données de plusieurs tables selon une clé commune.WHERE filtre les enregistrements, ORDER BY les trie (ASC ou DESC).SELECT, INSERT, UPDATE et DELETE.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.
Auteurs et la table Livres ?Livres : un champ id_auteur qui référence la clé primaire id de la table Auteurs.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.
La clause WHERE moyenne < 10 ne conserve que les lignes où la condition est vraie.
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.
DESC trie en ordre décroissant : la moyenne la plus élevée apparaît en premier.
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.
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.
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.
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.
id_livre clé primaire, titre, auteur, disponible)id_emprunteur clé primaire, nom, prenom, classe)id_emprunt clé primaire, id_livre clé étrangère → Livres, id_emprunteur clé étrangère → Emprunteurs, date_emprunt, date_retour)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.
10 questions · Correction immédiate
Classes à la table Élèves ?eleves(id, nom, id_classe, moyenne), quel champ est une clé étrangère ?