Middle
85
questionbank
Как реализуется связь многие-к-многим (m2m) на уровне базы данных?
Ответ от нейросети
sobes.tech AI
Связь многие-ко-многим (m2m) реализуется через промежуточную (связующую) таблицу. Эта таблица содержит внешние ключи, ссылающиеся на первичные ключи двух таблиц, между которыми устанавливается связь. Каждая запись в промежуточной таблице представляет одну связь между одной записью из первой таблицы и одной записью из второй.
Например, для связи "Книги" и "Авторы":
Таблица Books:
book_id(Первичный ключ)title
Таблица Authors:
author_id(Первичный ключ)name
Таблица Book_Authors (Промежуточная):
book_author_id(Первичный ключ - опционально, можно использовать составной ключ)book_id(Внешний ключ, ссылающийся наBooks.book_id)author_id(Внешний ключ, ссылающийся наAuthors.author_id)
CREATE TABLE Books (
book_id INT PRIMARY KEY,
title VARCHAR(255)
);
CREATE TABLE Authors (
author_id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE Book_Authors (
-- book_author_id INT PRIMARY KEY, -- опциональный первичный ключ
book_id INT,
author_id INT,
FOREIGN KEY (book_id) REFERENCES Books(book_id),
FOREIGN KEY (author_id) REFERENCES Authors(author_id),
PRIMARY KEY (book_id, author_id) -- составной первичный ключ
);
Запросы для получения данных:
Чтобы найти всех авторов для определенной книги:
SELECT A.name
FROM Authors A
JOIN Book_Authors BA ON A.author_id = BA.author_id
WHERE BA.book_id = <ID книги>;
Чтобы найти все книги определенного автора:
SELECT B.title
FROM Books B
JOIN Book_Authors BA ON B.book_id = BA.book_id
WHERE BA.author_id = <ID автора>;