Les bases de données : le modèle relationnel et les premières requêtes
Cours · informatique (tronc commun des prépas scientifiques), chapitre 15 · prépas scientifiques, tronc commun · le début du chapitre, la suite sur Adloun
15.1 Introduction et motivation
Le chapitre 4 savait lire un fichier de mesures : une table, des lignes, des colonnes — et tout le travail à la charge de notre programme Python. Mais les données du monde réel ne vivent pas dans un fichier : la médiathèque municipale connaît ses livres, ses auteurs, ses usagers et les emprunts qui les relient ; l'hôpital, ses patients, ses médecins et leurs rendez-vous ; le lycée, ses élèves, ses classes et ses options. Plusieurs familles d'objets, des liens entre elles, des milliers de mises à jour par jour, et des questions qui traversent tout : « quels usagers de Lyon ont emprunté un livre de Verne en octobre ? ».
Pour cela, l'informatique a construit l'un de ses plus beaux édifices : la base de données relationnelle, où les données sont rangées en tables reliées par des clés, et qu'on interroge dans un langage déclaratif, SQL — on y écrit ce qu'on veut, pas comment le calculer : le moteur de la base se charge de l'algorithme. C'est un changement de posture complet par rapport aux deux premières années de ce livre, et une expérience à vivre : la requête qui aurait demandé trente lignes de Python s'écrit en trois lignes de SQL. Ce chapitre pose le modèle — tables, clés primaires et étrangères, entités et associations — et les requêtes sur une table ; le chapitre 16 fera parler les tables entre elles.
15.2 Le vocabulaire des bases de données
15.2.1 Tables, attributs, enregistrements
Une table (ou relation) est un ensemble de données organisé en lignes et colonnes :
- chaque colonne est un attribut, doté d'un nom et d'un domaine — le type de ses valeurs : entier, flottant ou chaîne de caractères (nous nous en tiendrons à ces trois-là) ;
- chaque ligne est un enregistrement : une valeur par attribut, décrivant un objet ;
- le schéma de la table est la donnée de son nom et de la liste de ses attributs avec leurs domaines — la carte d'identité de la table, indépendante de son contenu.
On note le schéma sous la forme : livre(id_livre, titre, id_auteur, annee, pages).
Quatre tables. Les deux premières décrivent les objets :
auteur | |||
|---|---|---|---|
id_auteur | nom | naissance | |
| 1 | Verne | 1828 | |
| 2 | Austen | 1775 | |
| 3 | Tolstoï | 1828 | |
| 4 | Colette | 1873 |
livre | ||||
|---|---|---|---|---|
id_livre | titre | id_auteur | annee | pages |
| 1 | Vingt mille lieues sous les mers | 1 | 1870 | 448 |
| 2 | De la Terre à la Lune | 1 | 1865 | 320 |
| 3 | Orgueil et préjugés | 2 | 1813 | 480 |
| 4 | Guerre et paix | 3 | 1869 | 1536 |
| 5 | Anna Karénine | 3 | 1877 | 864 |
| 6 | Le Blé en herbe | 4 | 1923 | 192 |
| 7 | Michel Strogoff | 1 | 1876 | 512 |
| 8 | Les Vrilles de la vigne | 4 | 1908 | 256 |
Les deux suivantes décrivent les personnes et les liens :
usager | ||
|---|---|---|
id_usager | nom | ville |
| 1 | Alice | Lyon |
| 2 | Bruno | Paris |
| 3 | Chloé | Lyon |
| 4 | David | Nantes |
| 5 | Emma | Paris |
| 6 | Farid | Nantes |
emprunt | ||
|---|---|---|
id_usager | id_livre | jour |
| 1 | 1 | 2025-09-03 |
| 1 | 4 | 2025-09-10 |
| 2 | 3 | 2025-09-05 |
| 3 | 1 | 2025-09-12 |
| 4 | 2 | 2025-09-20 |
| 3 | 6 | 2025-10-01 |
| 3 | 5 | 2025-10-02 |
| 2 | 7 | 2025-10-05 |
| 5 | 4 | 2025-10-06 |
| 1 | 3 | 2025-10-08 |
Domaines : id_*, naissance, annee, pages sont des entiers ; nom, titre, ville, jour des chaînes. Noter jour : une chaîne au format AAAA-MM-JJ — choix délibéré, car l'ordre alphabétique de ces chaînes coïncide alors avec l'ordre chronologique (exercice 10) ; aucune notion de type « date » n'est au programme.
Exercices du chapitre
- Podiums et pagination corrigé
- DISTINCT, et ce qu'il dédoublonne vraiment corrigé
- Trois questions ensemblistes corrigé
- Concevoir le schéma d'un festival corrigé
- Du produit cartésien à la jointure corrigé
- Plaidoyer pour la clé étrangère corrigé