Назад к вопросам
СБЕР
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) связь многие-ко-многим можно реализовать двумя способами:
- Встраивание массивов идентификаторов связанных документов в обе коллекции (референсы).
- Создание отдельной коллекции-связки, где каждый документ содержит ссылки на обе связанные сущности.
Пример с референсами:
// Документ студента
{
"_id": "student1",
"name": "Иван",
"course_ids": ["course1", "course2"]
}
// Документ курса
{
"_id": "course1",
"title": "Математика",
"student_ids": ["student1", "student3"]
}
Выбор подхода зависит от требований к целостности данных, частоты обновлений и объёма данных.