Bases de données relationnelles et SQL
Modèle relationnel, clés, contraintes d'intégrité et requêtes SQL (SELECT, JOIN, GROUP BY, INSERT/UPDATE/DELETE) avec exemples exécutables.
1. Pourquoi une base de données relationnelle ?
Stocker des données dans des fichiers plats (CSV) pose quatre problèmes : redondance, incohérence, absence de contrôle des accès concurrents et difficulté d'interrogation. Un SGBD relationnel (PostgreSQL, MySQL, SQLite) résout ces problèmes en garantissant les propriétés ACID : Atomicité, Cohérence, Isolation, Durabilité.
2. Le modèle relationnel
Une relation (table) est un ensemble de n-uplets (lignes) définis sur des attributs (colonnes) typés. Vocabulaire exigible :
- Schéma relationnel :
Eleve(id INTEGER, nom TEXT, classe TEXT). - Clé primaire : attribut(s) identifiant de façon unique chaque n-uplet ; ni nul, ni dupliqué.
- Clé étrangère : attribut référençant la clé primaire d'une autre relation.
- Contraintes d'intégrité : de domaine (type et valeurs admises), d'entité (unicité de la clé primaire), référentielle (toute clé étrangère pointe vers une ligne existante).
Schéma d'étude
CREATE TABLE eleve (
id INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
classe TEXT CHECK (classe IN ('TG1','TG2','TG3'))
);
CREATE TABLE devoir (
id INTEGER PRIMARY KEY,
matiere TEXT NOT NULL,
coef REAL DEFAULT 1
);
CREATE TABLE note (
eleve_id INTEGER REFERENCES eleve(id),
devoir_id INTEGER REFERENCES devoir(id),
valeur REAL CHECK (valeur BETWEEN 0 AND 20),
PRIMARY KEY (eleve_id, devoir_id)
);
La table note illustre une association plusieurs-à-plusieurs : sa clé primaire est composite.
3. Interroger : le SELECT
SELECT nom, classe FROM eleve WHERE classe = 'TG2' ORDER BY nom;
Ordre d'écriture : SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT.
Ordre d'évaluation logique : FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. C'est pourquoi on ne peut pas utiliser un alias du SELECT dans le WHERE.
Jointures
SELECT e.nom, d.matiere, n.valeur
FROM note n
JOIN eleve e ON e.id = n.eleve_id
JOIN devoir d ON d.id = n.devoir_id
WHERE d.matiere = 'NSI';
JOIN(interne) : ne garde que les lignes appariées.LEFT JOIN: garde toutes les lignes de gauche, complète parNULL— utile pour repérer les élèves sans note.
Agrégats
SELECT e.classe, ROUND(AVG(n.valeur), 2) AS moyenne, COUNT(*) AS nb
FROM eleve e JOIN note n ON n.eleve_id = e.id
GROUP BY e.classe
HAVING COUNT(*) >= 5;
WHERE filtre les lignes avant regroupement, HAVING filtre les groupes après. Fonctions d'agrégation : COUNT, SUM, AVG, MIN, MAX.
4. Modifier les données
INSERT INTO eleve (id, nom, classe) VALUES (12, 'Nour', 'TG1');
UPDATE eleve SET classe = 'TG3' WHERE id = 12;
DELETE FROM note WHERE eleve_id = 12;
⚠️ Un UPDATE ou un DELETE sans WHERE s'applique à toute la table : erreur classique et irréversible hors transaction.
5. Transactions
BEGIN;
UPDATE compte SET solde = solde - 100 WHERE id = 1;
UPDATE compte SET solde = solde + 100 WHERE id = 2;
COMMIT; -- ou ROLLBACK en cas d'erreur
L'atomicité garantit que le virement est entièrement effectué ou pas du tout.
6. Erreurs fréquentes au bac
- Confondre clé primaire et identifiant « métier » (un nom n'est pas unique).
- Oublier que
NULLn'est égal à rien : on écritWHERE valeur IS NULL, jamais= NULL. - Placer une condition d'agrégat dans le
WHERE. - Supprimer une ligne référencée : le SGBD refuse (violation d'intégrité référentielle) sauf
ON DELETE CASCADE.
À retenir
Modèle relationnel = tables + clés + contraintes. SQL est déclaratif : on décrit ce que l'on veut, le SGBD choisit comment l'obtenir. Maîtriser JOIN, GROUP BY/HAVING et les contraintes d'intégrité suffit à traiter l'essentiel des exercices d'épreuve.
Sources et références
Ce cours est rédigé par l'équipe RévisionBac à partir du programme officiel et des sources institutionnelles ci-dessous. Elles permettent de vérifier les définitions, les chiffres et les normes citées.
- 1.Programmes et ressources du lycée général et technologique — Éduscol — Ministère de l'Éducation nationale
- 2.Bulletin officiel de l'Éducation nationale (programmes du baccalauréat) — education.gouv.fr
- 3.Ressources et programme de NSI — Éduscol
- 4.Documentation du langage Python — Python Software Foundation
- 5.Protection des données et RGPD — CNIL
Contenu vérifié et mis à jour le 08/08/2026. Les liens renvoient vers les sites officiels des éditeurs cités.
Historique éditorial
Ce chapitre est rédigé et relu par l'équipe RévisionBac, puis enrichi par les contributions validées.
- — Dernière mise à jour du cours (relecture et enrichissement)
- — Première publication de la fiche de cours