Как ты решаешь связь многие ко многим

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

Ответ

Для связи "многие ко многим" используется промежуточная таблица (junction table), которая содержит внешние ключи из обеих связанных таблиц.

Пример:
Есть таблицы Students и Courses. Студент может записаться на несколько курсов, а курс может иметь несколько студентов.

CREATE TABLE Students (
    student_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE Courses (
    course_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(student_id),
    FOREIGN KEY (course_id) REFERENCES Courses(course_id)
);

В Pandas:
Можно использовать merge() для соединения через промежуточный DataFrame.

import pandas as pd

students = pd.DataFrame({'student_id': [1, 2], 'name': ['Alice', 'Bob']})
courses = pd.DataFrame({'course_id': [101, 102], 'title': ['Math', 'Physics']})
student_courses = pd.DataFrame({'student_id': [1, 1, 2], 'course_id': [101, 102, 101]})

result = students.merge(student_courses, on='student_id').merge(courses, on='course_id')

Такой подход обеспечивает гибкость и нормализацию данных.