Retour au cours

Modélisation des Relations : Plusieurs à Plusieurs (M:N) et Tables de Jonction

Principes Fondamentaux des Bases de Données : De Zéro à Héros

Leçon 11 : Modélisation des Relations : Plusieurs à Plusieurs (M:N) et Tables de Jonction

La relation M:N est la plus complexe à modéliser directement, car elle ne peut pas exister naturellement dans la structure relationnelle.

Définition d'une Relation Plusieurs à Plusieurs

Une relation M:N signifie qu'un enregistrement dans la Table A peut être lié à plusieurs enregistrements dans la Table B, et un enregistrement dans la Table B peut être lié à plusieurs enregistrements dans la Table A.

Exemple : Étudiants et Cours

  • Un Étudiant peut s'inscrire à plusieurs Cours.
  • Un Cours peut être suivi par plusieurs Étudiants.

La Solution : La Table de Jonction

Pour résoudre une relation M:N, nous introduisons une troisième table appelée Table de Jonction (ou Table d'Association/Table Pont). Cette table convertit la relation M:N en deux relations 1:N distinctes.

Étapes d'Implémentation :

  1. Identifier les deux entités principales (Students et Courses).
  2. Créer une nouvelle table de jonction (Enrollments).
  3. La table de jonction contient des Clés Étrangères pointant vers les Clés Primaires des DEUX tables originales.

sql -- 1. Table Principale (Students) CREATE TABLE Students ( StudentID INTEGER PRIMARY KEY, StudentName VARCHAR(100) );

-- 2. Table Principale (Courses) CREATE TABLE Courses ( CourseID INTEGER PRIMARY KEY, CourseTitle VARCHAR(100) );

-- 3. Table de Jonction (Enrollments) CREATE TABLE Enrollments ( EnrollmentID INTEGER PRIMARY KEY, -- PK facultative pour le lien lui-même StudentID INTEGER, -- FK 1 (Côté Plusieurs de Student) CourseID INTEGER, -- FK 2 (Côté Plusieurs de Course) EnrollmentDate DATE,

FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)

);

Désormais, un étudiant peut avoir plusieurs entrées dans Enrollments, et un cours peut avoir plusieurs entrées dans Enrollments.