Как реализуется связь Many-to-Many в БД

«Как реализуется связь Many-to-Many в БД» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для связи Many-to-Many в реляционных БД используется промежуточная таблица (junction table), которая содержит внешние ключи на обе связанные таблицы. В Golang это можно реализовать через структуры и GORM:

type User struct {
    gorm.Model
    Name      string
    Languages []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
    gorm.Model
    Name  string
    Users []User `gorm:"many2many:user_languages;"`
}

// Автоматически создаст 3 таблицы:
// - users
// - languages
// - user_languages (промежуточная)

Без ORM потребуется вручную создать все три таблицы и выполнять JOIN-запросы. Ключевые моменты:

  • Промежуточная таблица содержит два внешних ключа
  • Обычно добавляют первичный ключ для пары (id1, id2)
  • Можно добавлять дополнительные поля в связующую таблицу (например, created_at)