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

Как реализовать связь многие ко многим

Вопрос

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

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

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

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

Коротко

Правильный ответ: Отдельная таблица связи с FK на студента и курс. Связь M:N разворачивают в таблицу связи (enrollments) с двумя FK и составным или суррогатным ключом, туда же кладут атрибуты связи вроде даты записи.

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

  1. Колонка course_ids у студентов со списком через запятую
  2. Объединить студентов и курсы в одну общую таблицу
  3. Внешний ключ student_id в таблице курсов
  4. Отдельная таблица связи с FK на студента и курсправильный ответ

Разбор

Связь M:N разворачивают в таблицу связи (enrollments) с двумя FK и составным или суррогатным ключом, туда же кладут атрибуты связи вроде даты записи. Список через запятую нарушает 1НФ, по нему нельзя сделать FK и эффективный поиск. FK в курсах даёт только одного студента на курс. Объединение таблиц порождает дубли и аномалии.

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

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