Тип связи многие ко многим онлайн урок.


Связь многие ко многим означает, что одной записи в таблице А может соответствовать 0 или более записей из таблицы В, и наоборот - одной записи в таблице B может соответствовать 0 или более записей из таблицы А. Сразу необходимо отметить, что
для моделирования связи многие ко многим необходимо использовать три таблицы, а не две (как для 1-1 и 1-многим).

Рассмотрим пример. Пусть нам необходимо смоделировать учет студентов, которые посещают курсы языков программирования. Каждый студент может посещать любое количество курсов. Это значит, что нам необходимо сохранить все возможные комбинации: какие курсы посещает каждый студент.

Мы не можем использовать связь 1-многим, т.к. тогда у нас была бы ситуация, когда отдельный студент может посещать только один курс. Смоделируем эту ситуацию. Создадим таблицу со студентами:

student
+----+-------+
| id | name |
+----+-------+
| 1 | Andy |
| 2 | John |
| 3 | Bob |
| 4 | Marie |
+----+-------+

Создадим таблицу с курсами:

course
+----+--------+
| id | name |
+----+--------+
| 1 | Python |
| 2 | PHP |
| 3 | Ruby |
| 4 | C++ |
+----+--------+

Для учета того, какой студент куда ходит, создадим таблицу с комбинациями:

student_course
+----+------------+-----------+
| id | student_id | course_id |
+----+------------+-----------+
| 1 | 1 | 2 |
| 2 | 1 | 1 |
| 3 | 2 | 4 |
| 4 | 4 | 2 |
| 5 | 4 | 4 |
+----+------------+-----------+

Таким образом мы можем создавать любые комбинации того, какой студент на какой курс ходит. Отметим, что первые две таблицы связаны с третьей связью один ко многим. Но в результате мы моделируем связь многие ко многим между таблицами студентов и курсов.