Розкажіть про зв'язок many:many (багато до багатьох)
Зв'язок «багато до багатьох» (many-to-many, M:N) - це коли кожен запис з однієї таблиці може бути пов'язаний з кількома записами з іншої, і навпаки - кожен запис з другої таблиці може бути пов'язаний з кількома з першої.
Такий зв'язок не можна реалізувати напряму - для цього створюють проміжну (сполучну) таблицю.
Приклад: студенти й курси
Один студент може записатися на кілька курсів, і один курс можуть проходити кілька студентів.
Таблиця студентів:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50)
);Таблиця курсів:
CREATE TABLE courses (
id INT PRIMARY KEY,
title VARCHAR(100)
);Сполучна таблиця:
CREATE TABLE student_courses (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);Таблиця student_courses зберігає пари «який студент - який курс».
Так утворюється двосторонній зв'язок:
багато студентів <-> багато курсів.
Як це виглядає логічно
| students | courses | student_courses |
|---|---|---|
| 1 - Анна | 10 - SQL | (1, 10) |
| 2 - Іван | 11 - Python | (1, 11) |
| (2, 10) |
Анна навчається на SQL і Python, а курс SQL проходять Анна й Іван.
Приклад запиту
Щоб отримати всіх студентів і курси, на які вони записані:
SELECT
students.name,
courses.title
FROM student_courses
JOIN students ON student_courses.student_id = students.id
JOIN courses ON student_courses.course_id = courses.id;Де використовується зв'язок M:N
- Студенти <-> Курси
- Автори <-> Книги
- Користувачі <-> Ролі
- Лікарі <-> Пацієнти
- Товари <-> Категорії
Особливості
- Реалізується через проміжну таблицю, у якій два зовнішні ключі.
- Зазвичай у цій таблиці первинний ключ складений (
(id1, id2)). - Часто проміжна таблиця зберігає й додаткові дані - наприклад, дату запису на курс.
Підсумок: Зв'язок багато до багатьох об'єднує об'єкти, які можуть бути пов'язані в обидва боки з безліччю елементів. Реалізується через третю таблицю, яка з'єднує дві основні.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.