数据库设计与可选列的多对多关系?

问题描述 投票:0回答:1

我有两个表,课程和模块的数据库关系。一门课程可以有很多模块,一个模块可以属于很多课程。管理员可以将课程添加到课程中。但是现在我们遇到了一个问题,即使你可以:

- Course 1
     module 1 | 3 credits
     module 2 | 4 credits

可能存在这样的情况:模块可以是可选的,但学生必须执行其中一个:

- Course 1
   module 3 | 2 credits OR module 4 | 2 credits

因此,您将在第一个场景中看到学生必须选择这两个模块才能获得课程学分,但在第二个场景中,学生可以选择模块3或模块4来获得2个学分。

所以我的问题是我不知道如何形成课程和模块之间的关系,因为一些模块可以是可选的,但至少需要一个。

laravel database-design
1个回答
1
投票

您将需要一个中间表来实现many to many关系。在此中间表中,您可以添加一列来指定课程是否为optional

但最终,在申请中,您将确保学生在必要时选择至少一个模块。

你可以有类似的东西:

courses: id, name

modules: id, name

course_module: id, course_id, module_id, optional

您的模型将如下所示:

class Course extends Model
{
    public function modules()
    {
        return $this->belongsToMany(Module::class)->withPivot();
    }
}

您可以通过检查来检查模块是否是必需的

$course->modules->first()->pivot->optional;
© www.soinside.com 2019 - 2024. All rights reserved.