Clés et relations
Pourquoi relier des tables ?
Imagine une boutique. On a une table clients et une table commandes.
Chaque commande appartient à un client.
Comment la base sait-elle quelle commande appartient à quel client ?
Grâce aux clés.
Les clés sont le mécanisme qui relie les tables entre elles. C'est le concept central des bases de données relationnelles (comme MySQL, PostgreSQL, SQLite).
PRIMARY KEY : identifiant unique
Une clé primaire (PRIMARY KEY) est une colonne dont la valeur identifie de façon unique chaque ligne. Chaque ligne a sa propre valeur — pas deux lignes avec le même ID.
CREATE TABLE clients (
id INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
email TEXT UNIQUE,
ville TEXT
);
PRIMARY KEY— valeur unique pour chaque ligne, jamais NULLNOT NULL— cette colonne ne peut pas être videUNIQUE— les valeurs doivent être uniques (mais peut être NULL)
En SQLite, une colonne INTEGER PRIMARY KEY s'auto-incrémente.
Tu n'as pas besoin de fournir l'ID à chaque INSERT — la base attribue automatiquement 1, 2, 3…
FOREIGN KEY : référencer une autre table
Une clé étrangère (FOREIGN KEY) est une colonne qui pointe vers la clé primaire d'une autre table. C'est le lien entre deux tables.
CREATE TABLE commandes (
id INTEGER PRIMARY KEY,
client_id INTEGER,
date_commande TEXT,
montant REAL,
FOREIGN KEY (client_id) REFERENCES clients(id)
);
La colonne client_id dans commandes doit contenir une valeur qui existe dans clients.id.
Si tu essaies d'insérer une commande avec un client_id qui n'existe pas, la base refuse.
Visualiser les relations
Table : clients
| id 🔑 | nom |
|---|---|
| 1 | Marie |
| 2 | Lucas |
| 3 | Sophie |
Table : commandes
| id 🔑 | client_id 🔗 | montant |
|---|---|---|
| 1 | 1 | 42.00 |
| 2 | 1 | 18.50 |
| 3 | 2 | 95.00 |
client_id dans commandes pointe vers id dans clients. Marie (id=1) a deux commandes.
L'intégrité référentielle
La clé étrangère garantit l'intégrité référentielle : on ne peut pas créer une commande pour un client qui n'existe pas. La base vérifie automatiquement la cohérence.
-- ✅ OK — client 1 existe
INSERT INTO commandes (id, client_id, montant)
VALUES (4, 1, 29.99);
-- ❌ Erreur — client 999 n'existe pas
INSERT INTO commandes (id, client_id, montant)
VALUES (5, 999, 15.00);
- PRIMARY KEY — identifiant unique de chaque ligne dans une table
- FOREIGN KEY — colonne qui pointe vers la PRIMARY KEY d'une autre table
- La clé étrangère crée le lien entre deux tables
- Intégrité référentielle — la base refuse les données incohérentes (référence à un ID inexistant)
NOT NULL— la colonne ne peut pas être videUNIQUE— les valeurs dans la colonne sont toutes différentes