如何在MySQL中实现必备表

时间:2018-07-01 11:34:43

标签: mysql laravel foreign-keys

我正在使用Laravel,并且数据库中有一个名为“ course”的表。它具有一些字段,例如“标题”,“内容”等。 我也希望一门课程具有一些先决条件(其他课程)。我该如何实施?我可以通过自参考外键来做到这一点,但是通过这种方式,课程的前提是一个前提。

2 个答案:

答案 0 :(得分:1)

因为一门课程可以具有许多先决条件,而一个先决条件属于许多与n:m关系的课程。

使用字段course_prerequisiteidcourse_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')
}

答案 1 :(得分:1)

有许多可行的方法可以做到这一点。我提到了两种方法。

方法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)
)