Встречается на собеседованиях • сегодня

Как реализуется связь Many-to-Many в БД

Связь Many-to-Many реализуется через промежуточную таблицу (junction table), которая содержит внешние ключи, ссылающиеся на обе связанные таблицы.

Пример для SQL:

sql
CREATE TABLE Students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE Courses (
    id SERIAL PRIMARY KEY,
    title VARCHAR(100)
);

CREATE TABLE StudentCourses (
    student_id INT REFERENCES Students(id),
    course_id INT REFERENCES Courses(id),
    PRIMARY KEY (student_id, course_id)
);

В ORM (например, SQLAlchemy):

python
class Student(Base):
    __tablename__ = 'students'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    courses = relationship("Course", secondary="student_courses")

class Course(Base):
    __tablename__ = 'courses'
    id = Column(Integer, primary_key=True)
    title = Column(String)
    students = relationship("Student", secondary="student_courses")

student_courses = Table('student_courses', Base.metadata,
    Column('student_id', Integer, ForeignKey('students.id')),
    Column('course_id', Integer, ForeignKey('courses.id'))

Ключевые моменты:

  1. Промежуточная таблица содержит минимум 2 внешних ключа
  2. Часто используют составной первичный ключ из этих двух полей
  3. В ORM связь описывается через параметр secondary
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы