最佳性能数据库设计,以存储学生考试成绩

时间:2014-05-01 23:42:21

标签: sql sql-server database database-design relational-database

之前我认为将检查数据存储在简单的表格中很容易:

id
subject_id
student_id
mark
date

但我注意到这是非常愚蠢的想法,因为它使数据库非常庞大 让我们假设我们有5000名学生上学,每个学生每月有12个科目...这意味着我们的考试表每年将包含5000 * 12 * 10 = 600000行,如果我们决定知道怎么办?从加入日期到当前日期的学生历史记录 ..我认为这是非常愚蠢的,我认为还有最佳的解决方案,使另一种设计符合我的需求.... 我需要以另一种较轻的方式存储考试数据 提前谢谢:)

1 个答案:

答案 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'