Ответ
Для связи "многие ко многим" используется промежуточная таблица (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')
Такой подход обеспечивает гибкость и нормализацию данных.