如何在mysql中实现prerequisite表

ao218c7q  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(169)

我使用的是laravel,数据库中有一个表叫做'course'。它有一些字段,如“标题”、“内容”等。。。而且我也希望一门课程有一些先决条件(其他课程)。我该如何实现这一点?我可以通过自我引用外键来实现这一点,但这样一来,课程就只有一个先决条件了。

tct7dpnv

tct7dpnv1#

由于一门课程可以有多个先决条件,而一个先决条件属于多个课程,因此它是一个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')
}
2cmtqfgy

2cmtqfgy2#

有很多可行的方法可以做到这一点。我提到了两种方法。
方法1:
您可以这样创建课程表。

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

现在为先决条件Map创建另一个表。

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:
另一种方法是在courses表中为prerequisites courses添加新列。虽然不能以这种方式添加外键约束,但可以通过编程方式进行管理。

Create table course(
id int(10) not null primary key,
prerequisites varchar(250),
title varchar(25),
content varchar(255)
)

相关问题