SQL : tables, relations et requêtes de base
Comprendre la structure d'une base de données relationnelle et savoir créer des tables liées entre elles.
Une base de données relationnelle organise l'information en tables composées de lignes (enregistrements) et de colonnes (champs). Chaque table représente une entité du monde réel : utilisateurs, cours, articles. La clé primaire (PRIMARY KEY) identifie de manière unique chaque ligne, garantissant qu'aucun doublon n'existe.
Les relations entre tables sont établies par les clés étrangères (FOREIGN KEY). Une clé étrangère dans une table référence la clé primaire d'une autre table, créant un lien logique. Par exemple, une table 'progress' contient un champ user_id qui référence la table 'users'. Les types de données (TEXT, INTEGER, BOOLEAN, TIMESTAMP) définissent ce que chaque colonne peut stocker.
Les opérations fondamentales CRUD se traduisent en SQL : INSERT INTO ajoute des données, SELECT les lit, UPDATE les modifie, DELETE les supprime. La clause WHERE filtre les résultats selon des conditions, et ORDER BY les trie. Ces quatre opérations couvrent la grande majorité des interactions avec une base de données.
-- Table des utilisateurs
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Table de progression liée aux utilisateurs
CREATE TABLE progress (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
module_slug TEXT NOT NULL,
completed BOOLEAN DEFAULT FALSE,
score INTEGER,
updated_at TIMESTAMP DEFAULT NOW()
);
-- Insérer un utilisateur
INSERT INTO users (name, email)
VALUES ('Marie Dupont', 'marie@example.com');
-- Lire la progression d'un utilisateur
SELECT module_slug, completed, score
FROM progress
WHERE user_id = 1
ORDER BY updated_at DESC;Exercice pratique
Exercice pratique
Concevez le schéma SQL d'une plateforme de cours en ligne avec trois tables : users, courses et enrollments.
- Créez la table users avec id, name, email et created_at.
- Créez la table courses avec id, title, description et level.
- Créez la table enrollments qui lie users et courses avec une date d'inscription et un statut.
- Écrivez une requête SELECT pour trouver tous les cours auxquels un utilisateur est inscrit.
✓Vous avez réussi si vos trois tables sont correctement liées par des clés étrangères et si votre requête SELECT retourne les cours d'un utilisateur spécifique.