Как реализовать таблицу предварительных требований в MySQL - PullRequest
0 голосов
/ 01 июля 2018

Я использую Laravel и у меня есть таблица в базе данных, которая называется «курс». Он имеет несколько полей, таких как «заголовок», «контент» и т. Д. А также я хочу, чтобы у курса были некоторые предпосылки (другие курсы). Как я могу это реализовать? Я могу сделать это с помощью внешнего ссылочного внешнего ключа, но таким образом для курса будет только одна предпосылка.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Есть много проходимых способов сделать это. Я упоминаю 2 способа сделать это.

Метод 1:

Вы можете создать свою таблицу курсов следующим образом.

Create table courses(
id int(10) not null primary key,
title varchar(25),
content varchar(255)
);

и теперь создайте еще одну таблицу для сопоставления предпосылок.

create table prerequisites(
course_id int(10),
prerequisite_id int(10),
foreign key (course_id) references courses(id),
foreign key (prerequisite_id) references courses(id)
)

Метод 2:

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

Create table course(
id int(10) not null primary key,
prerequisites varchar(250),
title varchar(25),
content varchar(255)
)
0 голосов
/ 01 июля 2018

Поскольку у Курса может быть много Предварительных условий, и одно Предварительное условие принадлежит многим Курсам, это отношение n: m.

Создать сводную таблицу course_prerequisite с полями id, course_id, prerequisite_id.

К модели курса добавьте метод prerequisites() с отношением BelongsToMany, например:

prerequisites() : BelongsToMany
{
    return $this->belongsToMany(Course::class, 'course_prerequisite', 'course_id', 'prerequisite_id')
}

Если вам нужна обратная связь, добавьте метод courses с помощью BelongsToMany:

courses() : BelongsToMany
{
    return $this->belongsToMany(Course::class, 'course_prerequisite', 'prerequisite_id', 'course_id')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...