Вопрос37
Осталось:

Как реализовать отношения многие-ко-многим в SQL?

Образцовый ответ

Показывать ответ по умолчанию

Отношения многие-ко-многим в реляционных базах данных возникают, когда одна запись в первой таблице может соответствовать нескольким записям во второй таблице, и наоборот.

В SQL такие отношения реализуются с помощью промежуточной таблицы (также известной как таблица связей или соединительная таблица), которая связывает две основные таблицы посредством внешних ключей.

Как реализовать отношения многие-ко-многим в SQL

  • Создайте две основные таблицы, которые нужно связать.
  • Создайте промежуточную таблицу, содержащую внешние ключи на первичные ключи обеих основных таблиц.
  • Определите внешние ключи и составной первичный ключ в промежуточной таблице для обеспечения ссылочной целостности и уникальности пар связей.

Пример реализации

Представим сценарий с таблицами Student (Студенты) и Course (Курсы), где один студент может записаться на несколько курсов, и один курс может быть пройден несколькими студентами.

  • Создание таблицы студентов:
    MySQL
    CREATE TABLE Student (
        StudentID INT PRIMARY KEY,
        Name VARCHAR(100)
    );
    
  • Создание таблицы курсов:
    MySQL
    CREATE TABLE Course (
        CourseID INT PRIMARY KEY,
        Title VARCHAR(100)
    );
    
  • Создание промежуточной таблицы для установления связи многие-ко-многим:
    MySQL
    CREATE TABLE StudentCourse (
        StudentID INT,
        CourseID INT,
        PRIMARY KEY (StudentID, CourseID),
        FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
        FOREIGN KEY (CourseID) REFERENCES Course(CourseID)
    );
    

В результате:

  • Промежуточная таблица StudentCourse содержит пары StudentID и CourseID, представляющие связи между студентами и курсами.
  • Составной первичный ключ (StudentID, CourseID) гарантирует, что каждая пара уникальна, предотвращая дублирование связей.
  • Внешние ключи обеспечивают целостность данных, ссылаясь на соответствующие записи в таблицах Student и Course.