Выбор ответа Junior Проектирование и нормализация спрашивают часто обновлено

Связь многие ко многим

Вопрос

Студент может записаться на много курсов, на курсе много студентов. Как это смоделировать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Связующая таблица enrollments(studentid, courseid). Связь многие ко многим всегда раскладывается через связующую таблицу.

Варианты ответа

  1. Колонка course_ids со списком id через запятую в students
  2. Колонка course_id в students с внешним ключом
  3. Связующая таблица enrollments(student_id, course_id)правильный ответ
  4. Колонка student_id в courses с индексом

Разбор

Связь многие ко многим всегда раскладывается через связующую таблицу. В неё же удобно класть атрибуты связи: дату записи, оценку. Список через запятую нарушает 1НФ: ни внешних ключей, ни индекса, ни нормального JOIN. Одиночная колонка course_id или student_id описывает только один ко многим.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.