1

这件事让我很困惑,我有一个大学信息系统学生表和科目(课程)表之间的连接表,主键是复合键(StudentID,SubjectID),它们都是外键,但学生可能会在考试中失败并重复主题,这样我们就会有重复的PK,我们需要记录所有数据。我有两种方法可以解决这个问题,但我不知道最好的方法?

  1. 添加新列作为主键而不是复合键。
  2. 加入复合键 Season Column 和 year 列,复合键将是(StudentID,SubjectID,Season,Year)。我不得不提一下,我不需要这个复合键作为外键。

哪种方式对性能和数据库完整性更好?

4

1 回答 1

2

主题和考试是独立的(如果相关)概念,因此您不应尝试在同一张表中表示它们。此外,针对给定科目举行考试的事实与任何特定学生参加该考试的事实是分开的。将所有这些概念拆分成各自的表格,模型变得更加自然,例如:

在此处输入图像描述

代表多次参加同一考试的学生只需在 STUDENT_EXAM 表中添加多行即可。


注意:STUDENT_SUBJECT 仅记录学生已注册该科目的事实,而不是何时(哪一年/哪个学期)。保留特定学期的信息可能需要模型中的其他表格和更复杂的关系。

注意:此模型中存在菱形依赖性。由于 SUBJECT_ID 是从“顶部”(SUBJECT)传递到“两侧”(STUDENT_SUBJECT,EXAM),然后在菱形的“底部”(STUDENT_EXAM)处合并,因此学生无法参加某个科目的考试他还没有注册。

于 2014-01-03T01:34:43.003 回答