Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: many, to

Как реализовать связь many-to-many (многие-ко-многим)?

Вопрос проверяет понимание проектирования схемы БД и умение правильно моделировать сложные связи.

Короткий ответ

Связь многие-ко-многим реализуется через промежуточную таблицу. Она содержит внешние ключи на обе связанные таблицы. Каждая строка такой таблицы описывает одну связь. Это стандартный и правильный подход в реляционных БД.

Длинный ответ

В реляционных БД нельзя напрямую связать таблицы many-to-many, поэтому всегда используется отдельная таблица.

1) Суть подхода

Определение:
Связь many-to-many реализуется через третью таблицу, которая хранит пары внешних ключей на связанные сущности.

2) Пример предметной области

Сущности:

  • Пользователи

  • Роли

Один пользователь может иметь несколько ролей, и одна роль может быть у многих пользователей.

3) Структура таблиц

users (
  id PRIMARY KEY
);

roles (
  id PRIMARY KEY
);

user_roles (
  user_id REFERENCES users(id),
  role_id REFERENCES roles(id),
  PRIMARY KEY (user_id, role_id)
);

4) Зачем составной первичный ключ

  • Исключает дубликаты связей

  • Ускоряет поиск

  • Гарантирует уникальность пары

5) Расширение связи

Промежуточная таблица может хранить дополнительные данные:

  • дата назначения роли

  • источник

  • статус

user_roles (
  user_id,
  role_id,
  assigned_at
)

6) Где это используется

  • RBAC (роли и права)

  • Теги и статьи

  • Подписки и группы

Краткий вывод

Связь many-to-many всегда реализуется через промежуточную таблицу с внешними ключами. Это гибкий и расширяемый способ моделирования сложных отношений.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

Ключевые слова

#many

#to

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.