代码之家  ›  专栏  ›  技术社区  ›  chinloyal

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

  •  0
  • chinloyal  · 技术社区  · 6 年前

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

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

    有一种情况,模块可以是可选的,但学生必须完成其中一项:

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

    所以你会看到在第一个场景中,学生必须选择这两个模块来获得课程的学分,但是在第二个场景中,学生可以选择模块3或模块4来获得2个学分。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Matthias S    6 年前

    您将需要一个中间表来实现 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;