之前我认为将检查数据存储在简单的表格中很容易:
id
subject_id
student_id
mark
date
但我注意到这是非常愚蠢的想法,因为它使数据库非常庞大 让我们假设我们有5000名学生上学,每个学生每月有12个科目...这意味着我们的考试表每年将包含5000 * 12 * 10 = 600000行,如果我们决定知道怎么办?从加入日期到当前日期的学生历史记录 ..我认为这是非常愚蠢的,我认为还有最佳的解决方案,使另一种设计符合我的需求.... 我需要以另一种较轻的方式存储考试数据 提前谢谢:)
答案 0 :(得分:1)
这是另一种方式。
表学生存储名称等
表主题有主题名称,如阅读,写作和算术,也可能是MinimumPassingMark。
表格考试有ExamId,ExamDate和SubjectID。它也可能有PercentageOfOverallGrade
表StudentExam具有StudentID,ExamId和mark。
科目和考试有一对多的关系(一个科目可以有很多考试,每个考试都有一个科目。学生和考试有很多关系。
因此,如果您想知道Johnny是否可以阅读,那就像。
一样简单select case
when sum(mark) * PercentageOfOverallGrade >= then 'pass' else 'no' end result
from Student s join StudentExam se on s.StudentId = se.StudentId
join Subject su on se.SubjectId = su.SubjectId
where s.name = 'Johnny'
and su.name = 'Reading'