Sobes.tech
Назад к вопросам
Senior
4

Как реализовать связь многие-ко-многим в реляционной и документо-ориентированной БД?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В реляционных базах данных связь многие-ко-многим реализуется через промежуточную таблицу (join table), которая содержит внешние ключи на обе связанные таблицы. Например, если есть таблицы Students и Courses, то создаётся таблица StudentCourses с полями student_id и course_id.

CREATE TABLE Students (id INT PRIMARY KEY, name VARCHAR(100));
CREATE TABLE Courses (id INT PRIMARY KEY, title VARCHAR(100));
CREATE TABLE StudentCourses (
  student_id INT,
  course_id INT,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES Students(id),
  FOREIGN KEY (course_id) REFERENCES Courses(id)
);

В документо-ориентированных базах (например, MongoDB) связь многие-ко-многим можно реализовать двумя способами:

  1. Встраивание массивов идентификаторов связанных документов в обе коллекции (референсы).
  2. Создание отдельной коллекции-связки, где каждый документ содержит ссылки на обе связанные сущности.

Пример с референсами:

// Документ студента
{
  "_id": "student1",
  "name": "Иван",
  "course_ids": ["course1", "course2"]
}

// Документ курса
{
  "_id": "course1",
  "title": "Математика",
  "student_ids": ["student1", "student3"]
}

Выбор подхода зависит от требований к целостности данных, частоты обновлений и объёма данных.