PostgreSQL : bien démarrer
Des tables aux premières requêtes : donnez une structure fiable à vos données.
Où en êtes-vous avec cette notion ?
Une indication personnelle, enregistrée uniquement dans ce navigateur.
À lire ensuite
Le format café
L’essentiel à comprendre, le temps d’un café.
Envie de creuser ? Un cours plus complet vous attend juste après, à déplier sans quitter cette page.
Le rôle d’une base relationnelle
Une table rassemble des lignes qui suivent un même schéma. Une clé primaire identifie une ligne ; une clé étrangère relie deux tables sans perdre leur cohérence.
Un exemple concret
CREATE TABLE lessons (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title text NOT NULL,
published boolean NOT NULL DEFAULT false
);
INSERT INTO lessons (title) VALUES ('Comprendre HTTP');
SELECT id, title FROM lessons WHERE published = false;
Pourquoi les contraintes comptent
La validation dans votre interface n’est pas suffisante. NOT NULL, UNIQUE et les clés étrangères protègent aussi les écritures réalisées par les scripts et les autres services.
À ne pas oublier
Utilisez des requêtes paramétrées pour les entrées utilisateur. Testez vos sauvegardes en les restaurant. Un index accélère certains accès mais augmente le coût des écritures.
Fiche mémo
Une transaction regroupe des opérations. Une contrainte protège un invariant. Un index sert une forme de requête, pas un souhait abstrait de performance.
Et si on allait plus loin ?
Le café vous a donné les repères. Prenez maintenant le temps de comprendre les mécanismes et de pratiquer, si vous le souhaitez.
Aller plus loinRelier les données et garantir une opération complèteDévelopper le coursReplier le cours
Ce que vous saurez faire
Modéliser une relation entre auteurs et cours, lire une jointure et choisir une frontière de transaction. Utilisez une base d’exercice vide, jamais votre base de production.
1. Modéliser ce qui doit rester vrai
Un cours a un auteur ; un auteur peut écrire plusieurs cours. Conserver les informations de l’auteur dans sa propre table évite de recopier son nom dans chaque cours. Une clé étrangère empêche de référencer un auteur inexistant.
CREATE TABLE authors (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL
);
CREATE TABLE courses (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title text NOT NULL,
author_id integer NOT NULL REFERENCES authors(id)
);
INSERT INTO authors (name) VALUES ('Camille');
INSERT INTO courses (title, author_id)
SELECT 'Comprendre les jointures', id FROM authors;
SELECT c.title, a.name
FROM courses AS c
JOIN authors AS a ON a.id = c.author_id;
Dans cette base vide, la requête renvoie le cours avec Camille comme auteur. Les alias c et a rendent l’origine des colonnes explicite. Une jointure relie des lignes selon une condition ; ce n’est pas seulement un collage de tables.
Un LEFT JOIN partant des auteurs conserve aussi les auteurs sans cours : les colonnes du cours valent alors NULL. Placez soigneusement les filtres : exiger ensuite une valeur non nulle côté cours dans WHERE peut éliminer ces lignes.
Référence : jointures PostgreSQL.
2. Une transaction protège une intention complète
Supposons qu’une publication exige deux écritures. Si seule la première réussit, la base peut contenir un état incomplet. Une transaction permet de valider l’ensemble ou de l’abandonner.
BEGIN;
UPDATE courses SET title = 'Les jointures, pas à pas'
WHERE title = 'Comprendre les jointures';
SELECT title FROM courses;
ROLLBACK;
SELECT title FROM courses;
Le premier SELECT voit le nouveau titre dans la transaction. Après ROLLBACK, le titre initial revient. COMMIT aurait conservé le changement. Les autres sessions ne voient pas ces modifications non validées.
Gardez les transactions courtes : ne les laissez pas attendre pendant qu’un utilisateur réfléchit ou qu’un service réseau répond. Une transaction SQL n’annule pas un e-mail déjà envoyé.
Référence : transactions PostgreSQL.
À vous de jouer
Ajoutez un second auteur sans cours. Quelle jointure permet de l’afficher dans la liste des auteurs et de leurs cours ?
Correction commentée
Partez de authors et utilisez LEFT JOIN courses ON courses.author_id = authors.id. L’auteur sans cours apparaît avec un titre NULL. Un JOIN ordinaire ne conserverait que les auteurs possédant une correspondance.
Vous pouvez aussi vous arrêter ici. L’approfondissement est facultatif.
Les repères Cours Café
Pour aller à la source
Documentation de référence. Vérification éditoriale encore à effectuer.
Gardez une trace de cette idée.
Favoris, notes et progression seront disponibles après connexion du stockage distant.