Реализация связи многие ко многим в MySQL онлайн урок.


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

Создадим таблицу с преподавателями и наполним ее значениями:

CREATE TABLE teacher(
id TINYINT(3) AUTO_INCREMENT,
name VARCHAR(30),
PRIMARY KEY(id)
) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

INSERT INTO teacher (name) VALUES ('Dr House'), ('Issak Newton'), ('Dr Freeman');
+----+--------------+
| id | name |
+----+--------------+
| 1 | Dr House |
| 2 | Issak Newton |
| 3 | Dr Freeman |
+----+--------------+
3 rows in set (0.00 sec)

Создадим таблицу student_teacher_consultation и исполним запросы для создания связей:


CREATE TABLE student_teacher_consultation (
id tinyint NOT NULL,
student_id int DEFAULT NULL,
teacher_id tinyint DEFAULT NULL,
consultation_date datetime DEFAULT NULL
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE student_teacher_consultation ADD INDEX(student_id);
ALTER TABLE student_teacher_consultation ADD INDEX(teacher_id);

ALTER TABLE student_teacher_consultation
ADD CONSTRAINT st_student_id
FOREIGN KEY (student_id) REFERENCES student(id)
ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE student_teacher_consultation
ADD CONSTRAINT st_teacher_id
FOREIGN KEY (teacher_id) REFERENCES teacher(id)
ON UPDATE CASCADE ON DELETE CASCADE;

Далее, наполним эту таблицу значениями, например так:

+----+------------+------------+---------------------+
| id | student_id | teacher_id | consultation_date |
+----+------------+------------+---------------------+
| 1 | 1 | 2 | 2015-07-23 10:40:00 |
| 2 | 2 | 1 | 2015-07-17 12:10:00 |
| 3 | 5 | 1 | 2015-07-17 13:10:00 |
| 4 | 8 | 3 | 2015-07-27 14:15:00 |
| 5 | 6 | 3 | 2015-07-11 10:34:00 |
+----+------------+------------+---------------------

Таким образом мы связали таблицы студентов и преподавателей при помощи дополнительной таблицы и получили тип связи многие ко многим.

Проверьте свои знания
Создать таблицу с языками language (например English, Ukrainian, ...). Связать таблицу country с таблицей language, моделируя используемые языки в разных странах. Например, в Украине чаще остальных используют украинский и русский язык. Таким образом необходимо получить связь многие ко многим.