Comment implémenter une relation plusieurs-à-plusieurs (M2M) en SQL?
sobes.tech IA
Réponse de l'IA
Pour implémenter une relation "plusieurs à plusieurs" en SQL, on utilise une table intermédiaire (de liaison). Cette table contient deux clés étrangères qui référencent les clés primaires des deux tables entre lesquelles la relation est établie.
Supposons que nous ayons les tables authors (auteurs) et books (livres), et que nous souhaitons implémenter une relation où un auteur peut écrire plusieurs livres, et un livre peut être écrit par plusieurs auteurs.
-
Création des tables d'entités : Nous créons les tables principales
authorsetbooks.-- Table des auteurs CREATE TABLE authors ( author_id INT PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- Table des livres CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(255) NOT NULL ); -
Création de la table de liaison : Nous créons la table
author_book, qui reliera les auteurs et les livres. Cette table contiendra des clés étrangères référant àauthor_idetbook_id.-- Table de liaison pour la relation Many-to-Many CREATE TABLE author_book ( author_id INT, book_id INT, PRIMARY KEY (author_id, book_id), -- Clé primaire composée pour l'unicité FOREIGN KEY (author_id) REFERENCES authors(author_id), FOREIGN KEY (book_id) REFERENCES books(book_id) );PRIMARY KEY (author_id, book_id)garantit que chaque paire (auteur, livre) est unique dans la table de liaison, évitant les doublons.- Les contraintes
FOREIGN KEYassurent l'intégrité référentielle, garantissant queauthor_idetbook_iddans la tableauthor_bookcorrespondent à des enregistrements existants dans les tablesauthorsetbooks.
-
Insertion de données : Nous insérons des données dans les tables.
-- Insertion dans la table des auteurs INSERT INTO authors (author_id, name) VALUES (1, 'Author A'), (2, 'Author B'), (3, 'Author C'); -- Insertion dans la table des livres INSERT INTO books (book_id, title) VALUES (101, 'Book 1'), (102, 'Book 2'), (103, 'Book 3'); -- Insertion dans la table de liaison (relations entre auteurs et livres) INSERT INTO author_book (author_id, book_id) VALUES (1, 101), -- Auteur A a écrit Book 1 (1, 102), -- Auteur A a écrit Book 2 (2, 101), -- Auteur B a écrit Book 1 (3, 103), -- Auteur C a écrit Book 3 (1, 103); -- Auteur A a écrit Book 3 -
Requête de données : Pour obtenir des données liées, on utilise des opérations
JOIN.-
Obtenir les livres écrits par un auteur spécifique :
SELECT b.title FROM books b JOIN author_book ab ON b.book_id = ab.book_id WHERE ab.author_id = 1; -- Livres écrits par l'auteur avec ID = 1 -
Obtenir les auteurs d'un livre spécifique :
SELECT a.name FROM authors a JOIN author_book ab ON a.author_id = ab.author_id WHERE ab.book_id = 101; -- Auteurs du livre avec ID = 101 -
Obtenir tous les livres avec leurs auteurs :
SELECT b.title, a.name FROM author_book ab JOIN books b ON ab.book_id = b.book_id JOIN authors a ON ab.author_id = a.author_id;
-
La table author_book est essentielle pour la mise en œuvre M2M, car elle stocke toutes les paires d'entités liées.