建立多对多的关系?

时间:2015-07-02 19:51:38

标签: database database-design

我目前正在编写第一个用于测试中心的数据库。我对如何建立某种关系建模感到困惑:

我在学生和课程之间有很多关系。考试中有一对多的课程。我现在正在做的事情是学生和考试,它需要存储每个学生考试的具体信息。

拥有源于另一个的多对多关系是否可能也是合乎逻辑的?是否有一种更简单的方法可以在标准化之后执行此操作?

2 个答案:

答案 0 :(得分:0)

见David W在评论部分发表的这个问题的上述答案:

  

我认为设计会导致student_exam表。鉴于   从理论上讲,考试表将具有exam_id的关键   作为外键返回考试表,反过来又有   course_id外键回到课程中。

答案 1 :(得分:0)

让我们回顾一下这段关系。

  • 学生需要修读一门或多门课程。
  • 一门课程有一个或多个学生。
  • 课程提供一门或多门考试。
  • 学生参加一门或多门考试。
  • 一名或多名学生参加考试。
  • 考试与课程相关。

学生,课程和考试是对象表。

Student
-------
Student ID
Student Name
...

Course
------
Course ID
Course Name
...

Exam
----
Exam ID
Course ID
...

课程ID是外键。这是课程与考试之间的一对多关系。一门课程有一门或多门考试。考试与课程相关。

由于我们在学生和课程之间有多对多的关系,我们创建一个联结表。

StudentCourse
-------------
Student ID
Course ID
Semester Year
Semester Third (or Quarter)
...

现在,你在问题中已经拥有了这一切。我重复一遍,所以我对考试的回答更有意义。

StudentExam
-----------
Student ID
Exam ID
Exam Time Stamp
Grade
...

考试表将考试与课程联系起来,因此无需重复课程编号。我们学生和考试之间有很多关系,所以我们创建了另一个联结表。

在向StudentExam表格写入行之前,软件或数据库必须验证学生是否在提供考试的课程中。

这是5阶归一化。您可以通过加入课程表,考试表和StudentExam表来获得课程所需的信息。