Skip to main content

Розкажіть про зв'язок many:many (багато до багатьох)

Зв'язок «багато до багатьох» (many-to-many, M:N) - це коли кожен запис з однієї таблиці може бути пов'язаний з кількома записами з іншої, і навпаки - кожен запис з другої таблиці може бути пов'язаний з кількома з першої.

Такий зв'язок не можна реалізувати напряму - для цього створюють проміжну (сполучну) таблицю.

Приклад: студенти й курси

Один студент може записатися на кілька курсів, і один курс можуть проходити кілька студентів.

Таблиця студентів:

sql
CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) );

Таблиця курсів:

sql
CREATE TABLE courses ( id INT PRIMARY KEY, title VARCHAR(100) );

Сполучна таблиця:

sql
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 зберігає пари «який студент - який курс». Так утворюється двосторонній зв'язок: багато студентів <-> багато курсів.

Як це виглядає логічно

studentscoursesstudent_courses
1 - Анна10 - SQL(1, 10)
2 - Іван11 - Python(1, 11)
(2, 10)

Анна навчається на SQL і Python, а курс SQL проходять Анна й Іван.

Приклад запиту

Щоб отримати всіх студентів і курси, на які вони записані:

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)).
  • Часто проміжна таблиця зберігає й додаткові дані - наприклад, дату запису на курс.

Підсумок: Зв'язок багато до багатьох об'єднує об'єкти, які можуть бути пов'язані в обидва боки з безліччю елементів. Реалізується через третю таблицю, яка з'єднує дві основні.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.