Jusqu'à maintenant nous n'avons utilisé qu'une seule table pour expérimenter avec nos premières requêtes SQL. Dans la réalité on aura souvent besoin d'utiliser plusieurs tables pour représenter nos données que l'on pourra ensuite lier les unes aux autres gràce à des clés étrangères.
Clés étrangères
Dans notre exemple initial on avait sauvegardé les catégories de nos recettes sous forme d'une simple chaîne de caractères. Mais si on souhaite sauvegarder plus d'informations on pourra utiliser une autre table.
CREATE TABLE categories (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
title VARCHAR(150) NOT NULL,
description TEXT
);
CREATE TABLE recipes (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
title VARCHAR(150) NOT NULL,
slug VARCHAR(150) NOT NULL,
content TEXT,
category_id INTEGER,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL
);
On pourra ensuite créer nos catégories
INSERT INTO categories (title)
VALUES ('Plat'), ('Dessert');
Enfin, quand on créera une recette on pourra spécifier la catégorie à laquelle elle appartient en utilisant l'identifiant de la catégorie.
INSERT INTO recipes (title, slug, category_id)
VALUES
('Crême anglaise', 'creme-anglaise', 2),
('Soupe', 'soupe', 1),
('Salade de fruit', 'salade-de-fruit', 2);
JOIN
Lorsque l'on souhaitera récupérer les informations de plusieurs tables on pourra les joindre ensemble grâce à des jointures
SELECT r.id, r.title, c.title AS category
FROM recipes r
JOIN categories c ON c.id = r.category_id;