Выбор ответа Junior ER-модели и нормализация спрашивают часто обновлено
Как реализовать связь многие ко многим
Вопрос
Студент может записаться на много курсов, на курсе много студентов. Как это реализовать в реляционной БД?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Отдельная таблица связи с FK на студента и курс. Связь M:N разворачивают в таблицу связи (enrollments) с двумя FK и составным или суррогатным ключом, туда же кладут атрибуты связи вроде даты записи.
Варианты ответа
- Колонка course_ids у студентов со списком через запятую
- Объединить студентов и курсы в одну общую таблицу
- Внешний ключ student_id в таблице курсов
- Отдельная таблица связи с FK на студента и курсправильный ответ
Разбор
Связь M:N разворачивают в таблицу связи (enrollments) с двумя FK и составным или суррогатным ключом, туда же кладут атрибуты связи вроде даты записи. Список через запятую нарушает 1НФ, по нему нельзя сделать FK и эффективный поиск. FK в курсах даёт только одного студента на курс. Объединение таблиц порождает дубли и аномалии.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.