我在K-12学校工作,我正在开发成绩册系统。我们开发的现有成绩簿系统基于Excel和VBA。对于我来说,每学期结束时合并400多个Excel工作簿总是一件噩梦。在暑假期间,我打算将所有数据放在数据库中,以便于管理和填充。
我的问题是:
对于像成绩册这样的计算密集型应用程序,将计算存储在表字段中是好还是仅存储原始数据并仅在前端进行计算更好?
Excel成绩簿系统的工作方式是这样的......
上面的所有内容都很容易在电子表格中制作,但我不知道如何在数据库中实现它。
截至目前,我正在考虑如下表:所有评估记录如下:
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
答案 0 :(得分:1)
400名学生,即用于处理数百万记录的RDBMS的花生。你不必担心性能。
我的描述中没有看到PostgreSQL在简单查询中无法做到的事情。仅存储必要的信息并计算其余信息。此外,如果该信息已在链接表highest_possible_score
中,请不向表tbl_scores
添加冗余列assessment
。那会弊大于利。
如果(并且仅当)您稍后发现查询太慢,您可以始终使用物化视图(将查询的输出写入表,在更改基础数据后重新计算该表。)
答案 1 :(得分:0)
非规范化取决于记录的总量。我认为对于学校来说,做到这一点并不是那么大,更好的决定是用查询整合数据(是的,一些联接会更复杂,这是正常的)