Laravel 使用可选列的多对多关系的数据库设计?
我与两个表、课程和模块有数据库关系。一门课程可以有许多模块,一个模块可以属于许多课程。管理员可以将模块添加到课程中。但现在我们遇到了一个问题,尽管您可以:Laravel 使用可选列的多对多关系的数据库设计?,laravel,database-design,Laravel,Database Design,我与两个表、课程和模块有数据库关系。一门课程可以有许多模块,一个模块可以属于许多课程。管理员可以将模块添加到课程中。但现在我们遇到了一个问题,尽管您可以: - Course 1 module 1 | 3 credits module 2 | 4 credits 在某些情况下,模块可以是可选的,但学生必须完成其中一项: - Course 1 module 3 | 2 credits OR module 4 | 2 credits 因此,您将看到在第一个场景中,学生必须
- Course 1
module 1 | 3 credits
module 2 | 4 credits
在某些情况下,模块可以是可选的,但学生必须完成其中一项:
- Course 1
module 3 | 2 credits OR module 4 | 2 credits
因此,您将看到在第一个场景中,学生必须选择这两个模块来获得课程的学分,但在第二个场景中,学生可以选择模块3或模块4来获得2个学分
所以我的问题是,我不知道如何形成课程和模块之间的关系,因为有些模块可以是可选的,但至少需要一个模块。您需要一个中间表来实现多对多关系。 在这个中间表中,您可以添加一列来指定课程是否是可选的 但最终,在应用程序中,您将负责确保学生选择至少一个必修模块 你可以有这样的东西: 课程:id、姓名 模块:id、名称 课程模块:id,课程id,模块id,可选 然后,您的模型将如下所示:
class Course extends Model
{
public function modules()
{
return $this->belongsToMany(Module::class)->withPivot();
}
}
您可以通过检查来检查模块是否是必需的
$course->modules->first()->pivot->optional;
请原谅我的无知,但我不能完全想象它的结构。学分具体在哪里声明?它们是否与模块直接关联?通过多对多关系,链接是通过中间表建立的——正如@Matthias所提到的,您可以根据自己的意愿拥有任意多或任意少的交叉引用记录。学分是否以任何方式决定了给定课程需要多少模块?学分只是modules@SebastianSulinski的一个属性