Ответ
Для связи 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)