需要为学校评分系统提供数据库设计建议

时间:2012-03-12 16:18:13

标签: sql database excel postgresql

我在K-12学校工作,我正在开发成绩册系统。我们开发的现有成绩簿系统基于Excel和VBA。对于我来说,每学期结束时合并400多个Excel工作簿总是一件噩梦。在暑假期间,我打算将所有数据放在数据库中,以便于管理和填充。

我的问题是:

对于像成绩册这样的计算密集型应用程序,将计算存储在表字段中是好还是仅存储原始数据并仅在前端进行计算更好?

Excel成绩簿系统的工作方式是这样的......

  • 教师以分数/最高分数的形式记录每位学生每项评估的每个分数。 (例如测验1 = 5/10,作业1 = 20/25,等等
  • 分数将按百分比计算并按组件汇总。 “组件”是指测验,家庭作业等。所以会有类似“测验平均值= 90%,家庭作业平均值= 80%等等
  • 不同的科目将有不同的最终成绩分类,如“科学= 50%测验+ 50%家庭作业,数学= 60%测验+ 40%家庭作业”。
  • 然后,通过获得所有科目的平均值来计算每个学生的一般平均成绩。

上面的所有内容都很容易在电子表格中制​​作,但我不知道如何在数据库中实现它。

截至目前,我正在考虑如下表:所有评估记录如下:

tbl_scores
    id
    student_id
    term_id
    subject_id
    component_id
    assessment_id
    raw_score
    highest_possible_score    #not sure about this cause this can be implied from assessment_id

存储计算(每个分数条目的百分比,组件平均值,主题平均值,一般平均值等在数据库中)是否有用,并在新分数出现时使用存储过程和触发器更新它们? / p>

或者,仅存储原始分数并仅在前端计算所有内容是否更好?这个选项会比第一个更快,因为知道这里的SELECT查询会因子查询而变得更复杂吗?

顺便说一句,我打算使用PostgreSQL。

提前感谢任何建议。

DashMug

2 个答案:

答案 0 :(得分:1)

400名学生,即用于处理数百万记录的RDBMS的花生。你不必担心性能。

我的描述中没有看到PostgreSQL在简单查询中无法做到的事情。仅存储必要的信息并计算其余信息。此外,如果该信息已在链接表highest_possible_score中,请向表tbl_scores添加冗余列assessment。那会弊大于利。

如果(并且仅当)您稍后发现查询太慢,您可以始终使用物化视图(将查询的输出写入表,在更改基础数据后重新计算该表。)

答案 1 :(得分:0)

非规范化取决于记录的总量。我认为对于学校来说,做到这一点并不是那么大,更好的决定是用查询整合数据(是的,一些联接会更复杂,这是正常的)