On va prendre un peu de temps pour revoir ce qu'on a déjà vu. On va vraiment passer étape par étape sur tout ce qui se passe. La suite va reposer sur ce qu'on a déjà appris, donc c'est cool si tu piges parfaitement ce qui se passe à chaque commande.
Allez, on reprend notre exemple avec les étudiants et les cours. Depuis le tout début. De la création des tables jusqu'à l'explication de chaque étape. Prêt ?
On va maintenant créer la table students, qui va stocker les infos sur les étudiants, et on va la relier à la table courses grâce à une foreign key. Tu vas voir comment on utilise les foreign keys pour modéliser les relations entre les entités.
Création de la table students
La table students va contenir des infos sur les étudiants : leur identifiant unique, leur nom et leur date de naissance. On va la créer avec la commande CREATE TABLE.
CREATE TABLE students (
student_id SERIAL PRIMARY KEY, -- Clé unique pour chaque enregistrement
name TEXT NOT NULL, -- Nom de l'étudiant (champ obligatoire)
birth_date DATE -- Date de naissance de l'étudiant
);
Qu'est-ce qui se passe ici ?
student_id SERIAL PRIMARY KEY: C'est l'identifiant unique pour chaque étudiant. Le typeSERIALcrée un champ auto-incrémenté, etPRIMARY KEYgarantit que l'identifiant sera unique pour chaque ligne.name TEXT NOT NULL: Le champ pour le nom de l'étudiant. On a misNOT NULLpour qu'aucun enregistrement ne puisse être inséré sans nom.birth_date DATE: Le champ pour stocker la date de naissance. Ici, le typeDATEva nous aider à gérer les dates.
Si la table était une personne, student_id serait son passeport, name son prénom évident, et birth_date ce qu'on cache parfois, mais pour la base de données c'est important.
Création de la table courses
Maintenant, on va créer une table qui va contenir les infos sur les cours. Elle va inclure l'identifiant du cours, son titre et sa description.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- Identifiant unique du cours
title TEXT NOT NULL, -- Titre du cours (champ obligatoire)
description TEXT -- Description du cours
);
Qu'est-ce qui se passe ici ?
course_id SERIAL PRIMARY KEY: Pareil, c'est un champ auto-incrémenté qui crée un identifiant unique pour chaque cours.title TEXT NOT NULL: Le champ pour le titre du cours. On a misNOT NULLparce que c'est logique qu'un cours ait un nom.description TEXT: Le champ pour une petite description du cours. C'est un champ en plus, il peut rester vide (pas deNOT NULLici).
Un cours sans titre, c'est comme un livre sans couverture. Mais la base de données ne laissera pas passer ça !
Lier la table students à la table courses
Imaginons maintenant que chaque étudiant ne peut être inscrit qu'à un seul cours. Pour ça, on va ajouter une foreign key dans la table courses qui va pointer vers l'identifiant de l'étudiant dans la table students.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- Identifiant unique du cours
title TEXT NOT NULL, -- Titre du cours (champ obligatoire)
description TEXT, -- Description du cours
student_id INT REFERENCES students(student_id) -- Foreign key qui relie à la table students
);
Qu'est-ce que fait student_id INT REFERENCES students(student_id) ?
- On crée un champ
student_idqui va pointer vers l'identifiant unique de l'étudiant (student_id) dans la tablestudents. - La liaison entre les tables se fait avec le mot-clé
REFERENCES. - Ça veut dire que chaque fois qu'on insère des données dans
courses, la valeur destudent_iddoit exister dans la tablestudents. Si, par exemple, tu essaies d'inscrire un étudiant à un cours avec unstudent_idqui n'existe pas, tu vas avoir une erreur.
Insérer des données dans les tables
Une fois les tables créées, on va ajouter quelques étudiants et cours. Parce que bon, une salle vide, c'est pas très fun, non ?
On ajoute des étudiants
INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');
On ajoute des cours
INSERT INTO courses (title, description, student_id) VALUES
('Bases de SQL', 'Apprendre la syntaxe de base de SQL', 1),
('Bases de données relationnelles', 'Comprendre les modèles relationnels', 2),
('PostgreSQL pour les débutants', 'Installation et configuration de PostgreSQL', 3);
On a indiqué le student_id pour chaque cours, ce qui le relie à l'identifiant de l'étudiant dans la table students.
Vérifier la liaison entre les tables
Maintenant, on va vérifier que nos tables sont bien reliées. Pour ça, on va faire une requête qui affiche les infos sur les cours avec les noms des étudiants.
SELECT
courses.title AS course_title,
courses.description AS course_description,
students.name AS student_name
FROM
courses
JOIN
students ON courses.student_id = students.student_id;
Exemple de résultat : Résultat de la requête :
| course_title | course_description | student_name |
|---|---|---|
| Bases de SQL | Apprendre la syntaxe de base de SQL | Alex Lin |
| Bases de données relationnelles | Comprendre les modèles relationnels | Maria Chi |
| PostgreSQL pour les débutants | Installation et configuration de PostgreSQL | Otto Song |
On a relié les cours aux étudiants via une foreign key — et maintenant on peut récupérer les données liées en une seule requête. Voilà comment marche le modèle relationnel !
Résumé
J'espère que tout ce qu'on vient de voir était clair et évident pour toi. Parce que bientôt on va aller plus loin, et ce serait top que tu sois bien à l'aise avec tout ça.
GO TO FULL VERSION