PRO

Какие типы связей бывают в реляционных БД (1:1, 1:N, M:N)?

В реляционных БД используют три основных типа связей между таблицами: один‑к‑одному (1:1), один‑ко‑многим (1:N) и многие‑ко‑многим (M:N). Они реализуются через первичные и внешние ключи (PRIMARY KEY, FOREIGN KEY), иногда с дополнительными таблицами‑связками.
Подробный ответ

Связь 1:1 (один к одному)

Каждой строке в первой таблице соответствует не более одной строки во второй, и наоборот. Это связь 1:1.

Пример: таблица users и таблица user_profiles, где у каждого пользователя может быть ровно один профиль, а у профиля — ровно один владелец.

Реализация:

  • во второй таблице (user_profiles) внешний ключ user_id на users.id, который также является PRIMARY KEY или помечен как UNIQUE, чтобы не было двух профилей для одного пользователя.

Связь 1:N (один ко многим)

Одна строка в первой таблице связана с несколькими строками во второй, но каждая строка во второй относится только к одной строке в первой. Это связь 1:N.

Пример: users и orders: один пользователь может иметь много заказов, но каждый заказ принадлежит одному пользователю.

Реализация:

  • в таблице orders есть внешний ключ user_id на users.id, объявленный как FOREIGN KEY.

Связь M:N (многие ко многим)

Строка в первой таблице может быть связана с несколькими строками во второй, и наоборот. Это связь M:N.

Пример: students и courses — один студент может записаться на много курсов, один курс — иметь много студентов.

Прямая связь M:N в реляционной модели обычно раскладывается через таблицу‑связку:

  • создаётся промежуточная таблица, например student_courses;

  • в ней два внешних ключа: student_idstudents.id, course_idcourses.id;

  • каждая строка таблицы student_courses означает одну связь «студент — курс».

Как ответить на собеседовании

В реляционных БД основными типами связей являются 1:1, 1:N и M:N. Они строятся через PRIMARY KEY и FOREIGN KEY, а для связей многие‑ко‑многим почти всегда заводят отдельную промежуточную таблицу. Для junior важно уметь привести по одному реальному примеру для каждого типа.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге