2012-03-12 91 views
0

我正在为K-12学校工作,并且正在开发成绩簿系统。我也使用的现有的成绩簿系统是基于Excel和VBA开发的。对于我来说,每学期末合并400个Excel工作簿总是一场噩梦。在暑假期间,我打算将所有数据放在数据库中以便于管理和管理。需要针对学校评分系统的数据库设计建议

我的问题是这样的:

对于这样一个成绩簿计算密集型应用,是很好的计算存储在一个表中字段,或者是它更好地只存储原始数据并执行计算仅在前端?

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

  • 教师档案中得分/最高分的形式,每个分数为每个学生的每一个评价。 (例如测验1 = 5/10,家庭作业1 = 20/25等
  • 分数将按百分比计算并按每个组分进行汇总。 “组件”意味着测验,家庭作业等。所以会有类似于“测验平均= 90%,家庭作业平均= 80%等等
  • 不同的科目将有不同的最终成绩明细,如“科学= 50%测验+ 50%家庭作业,数学= 60%测验+ 40%Homeworks“。
  • 然后,每个学生的总平均成绩通过获得所有科目的平均值来计算。

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

由于瞬间,我想的东西就像所有的评估都记录像这样的表:

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 

难道是存储计算有用(百分比每个分数项,组件平均,数据库中的主题平均数,总体平均数等),并使用存储过程和触发器在新分数出现时更新它们?

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

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

在此先感谢您的任何建议。

DashMug

+0

除了我的文章,我想到的其中一个想法是继续使用Excel作为数据库的前端。 Excel每次都进行计算,并且(可能)将计算结果存储回数据库。 – dashmug 2012-03-12 16:22:42

回答

1

400名学生,即花生一个RDBMS,旨在处理记录的百万。你不用担心表现。

我在你的描述中没有看到PostgreSQL在简单查询中无法做到的事情。只存储必要的信息并计算其余部分。另外,如果不是,那么将冗余列highest_possible_score添加到您的表tbl_scores,如果该信息已在链接表assessment中。这会造成更多的伤害而不是好处。

如果(且仅当)您以后应该发现查询速度太慢,则始终可以使用实例化视图(将查询输出写入表中,然后在更改基础数据后重新计算该表)。

+0

实际上** 400个工作簿**而不是** 400个学生**。每个练习册将包含1个学年的1个学科的1个学科的得分信息,其中约有40个学生。这将总计为每个工作表大约48000个单独的分数。但我明白你的观点。谢谢。如果Excel可以做到这一点(虽然以一种古怪的方式),但RDBMS无法做到这一点。 – dashmug 2012-03-12 23:44:15

+0

@dashmug:如果遇到查询问题,您可以随时回到这里。 :) – 2012-03-13 11:57:14

+0

谢谢。我可能会发布关于我所做的最终模式或有关查询的问题的新问题。我会在这里添加一个链接,以便人们可以看到延续。再次感谢! – dashmug 2012-03-13 13:18:53

0

反规范化取决于总记录数。我认为,对于学校来说,这样做不会太大,更好的决定是将数据与查询合并(是的,它会更复杂一些连接会出现,这是正常的)