Se repérer dans les tables de la médiathèque
Objectif : Identifier les tables, leurs colonnes et les clés étrangères utiles à une question métier.
Quand on vous demande quels ouvrages sont empruntés, les informations ne se trouvent pas forcément au même endroit. Les œuvres, les exemplaires et les emprunts décrivent des objets différents : confondre leurs rôles rend les recherches difficiles. Dans cette leçon, vous apprenez à lire le schéma de la médiathèque et à repérer les liens entre ses tables avant de formuler une demande en SQL.
Le schéma, une carte des données
Un schéma relationnel décrit l’organisation des données dans une base : les tables, leurs colonnes et les liens entre les tables. Une table regroupe des informations portant sur un même type d’objet. Par exemple, adherents contient les informations propres aux personnes inscrites, tandis que oeuvres décrit les livres, films ou autres œuvres proposés par la médiathèque.
Chaque colonne porte une information précise. Dans adherents, nom et prenom décrivent l’identité, alors que date_inscription indique quand l’adhésion a commencé. Le schéma présenté dans le projet constitue votre référence : avant de chercher une donnée, vérifiez le nom exact de sa table et de sa colonne plutôt que de les deviner.
Comprendre les cinq tables
| Table | Ce qu’elle décrit | Colonnes à repérer |
|---|---|---|
| adherents | Les personnes inscrites | id_adherent, nom, prenom, courriel, date_inscription |
| oeuvres | Les œuvres proposées | id_oeuvre, titre, type_oeuvre, annee_parution |
| exemplaires | Les copies physiques ou unités disponibles | id_exemplaire, id_oeuvre, code_barres, disponible |
| emprunts | Les opérations d’emprunt | id_emprunt, id_adherent, id_exemplaire, date_emprunt, date_retour_prevue |
| retards | Les informations relatives aux retards | id_retard, id_emprunt, jours_retard, frais |
Distinguez bien une œuvre de ses exemplaires. Une œuvre peut exister en plusieurs exemplaires : le titre est enregistré dans oeuvres, tandis que chaque copie possède son propre code-barres dans exemplaires. Un emprunt concerne un exemplaire précis et un adhérent précis ; il ne désigne donc pas directement une œuvre.
Les noms qui commencent par id_ servent ici à identifier des enregistrements ou à faire référence à d’autres tables. Par exemple, id_adherent dans emprunts désigne l’adhérent concerné. La date de retour prévue est enregistrée dans emprunts ; les jours de dépassement et les frais figurent dans retards.
Repérer les clés primaires et étrangères
Une clé primaire distingue chaque enregistrement d’une table. Dans le schéma de la médiathèque, chaque table possède une colonne d’identifiant dédiée : id_adherent, id_oeuvre, id_exemplaire, id_emprunt ou id_retard. Une clé étrangère est une colonne qui référence la clé primaire d’une autre table ; elle exprime un lien et aide la base à empêcher les références vers un enregistrement inexistant.
-- Décrire les tables et leurs relations pour MariaDB 11
CREATE TABLE adherents (
id_adherent INT UNSIGNED AUTO_INCREMENT,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) NOT NULL,
courriel VARCHAR(255) NOT NULL,
date_inscription DATE NOT NULL,
PRIMARY KEY (id_adherent)
) ENGINE=InnoDB;
CREATE TABLE oeuvres (
id_oeuvre INT UNSIGNED AUTO_INCREMENT,
titre VARCHAR(255) NOT NULL,
type_oeuvre VARCHAR(50) NOT NULL,
annee_parution SMALLINT UNSIGNED,
PRIMARY KEY (id_oeuvre)
) ENGINE=InnoDB;
CREATE TABLE exemplaires (
id_exemplaire INT UNSIGNED AUTO_INCREMENT,
id_oeuvre INT UNSIGNED NOT NULL,
code_barres VARCHAR(50) NOT NULL,
disponible BOOLEAN NOT NULL DEFAULT TRUE,
PRIMARY KEY (id_exemplaire),
CONSTRAINT fk_exemplaires_oeuvres
FOREIGN KEY (id_oeuvre) REFERENCES oeuvres (id_oeuvre)
) ENGINE=InnoDB;
CREATE TABLE emprunts (
id_emprunt INT UNSIGNED AUTO_INCREMENT,
id_adherent INT UNSIGNED NOT NULL,
id_exemplaire INT UNSIGNED NOT NULL,
date_emprunt DATE NOT NULL,
date_retour_prevue DATE NOT NULL,
PRIMARY KEY (id_emprunt),
CONSTRAINT fk_emprunts_adherents
FOREIGN KEY (id_adherent) REFERENCES adherents (id_adherent),
CONSTRAINT fk_emprunts_exemplaires
FOREIGN KEY (id_exemplaire) REFERENCES exemplaires (id_exemplaire)
) ENGINE=InnoDB;
CREATE TABLE retards (
id_retard INT UNSIGNED AUTO_INCREMENT,
id_emprunt INT UNSIGNED NOT NULL,
jours_retard INT UNSIGNED NOT NULL,
frais DECIMAL(8, 2) NOT NULL,
PRIMARY KEY (id_retard),
CONSTRAINT fk_retards_emprunts
FOREIGN KEY (id_emprunt) REFERENCES emprunts (id_emprunt)
) ENGINE=InnoDB;Les contraintes PRIMARY KEY désignent les identifiants uniques ; chaque contrainte FOREIGN KEY nommée rend visible le lien entre deux tables. Ainsi, exemplaires.id_oeuvre référence oeuvres.id_oeuvre, et emprunts.id_exemplaire référence exemplaires.id_exemplaire. En suivant ces liens, vous pouvez tracer le chemin entre un adhérent, son emprunt, l’exemplaire concerné et l’œuvre associée.
Pour une question sur les exemplaires disponibles, commencez par exemplaires et repérez la colonne disponible. Pour une question sur les frais liés aux retards, partez de retards et identifiez frais ainsi que id_emprunt. Ce repérage vous évite de chercher une colonne dans la mauvaise table et prépare la construction de requêtes sur plusieurs tables.
À retenir
- Une table rassemble des données sur un type d’objet ; ses colonnes décrivent les informations associées.
- Les identifiants, comme id_oeuvre, permettent de distinguer les enregistrements d’une table.
- Une clé étrangère indique un lien explicite vers l’identifiant d’une autre table.
- Pour trouver où chercher, traduisez la question métier en objets et suivez les liens du schéma.
Dans la prochaine leçon, vous utiliserez ce repérage pour choisir précisément les colonnes à afficher avec une première requête.