准备设计一个试卷质量分析系统,记录每张试卷每个学生每项题目的失分情况以及学生的总分、班级均分、每项得分率等,数据库的设计如下:班级表、学生表、试卷表、学生试卷表,现在的问题是:1、试卷的题目项目数是可变的,是在试卷表中预设20项(可能的最大项目数)还是单独再设计一个试卷项目表?2、均分等成绩统计是在登记时一次性算好还是每次查询时再统计?3、记录每项失分的表是否要建立索引?预想的规模是1个学校,在校学生2000人,每生每学年测试60次,满足5年的运行时间。请大家帮忙指点

解决方案 »

  1.   

    2000人 * 60 次/人.年 * 5年 = 600000
    60万条学生考试数据(数据量应该不算很大)
    1、试卷的题目项目数是可变的,是在试卷表中预设20项(可能的最大项目数)还是单独再设计一个试卷项目表?
    ====>
    我认为在试卷表中,保存试卷的编号(id)及其他与试卷有关的信息(如:考试时间,考试说明,题目数量等等的信息),没有必要20项(这里的20项是什么东西,是题目吗?)。将试题的题目放到另外的表中,引用试卷表中的ID(外鍵),在ID字段上建立簇索引(Clustered INDEX)
    2、均分等成绩统计是在登记时一次性算好还是每次查询时再统计?
    我觉得一次性算好比较好一点
    3、记录每项失分的表是否要建立索引?
    用好索引很关键。
      

  2.   

    1、20项是指20项题目
    2、最头疼的是每项失分的登记,我个人想法是:a、设立一个个人但张试卷失分表,一条记录等级一个学生一张试卷上的各项时分和总分;b、单独设计一个表,一条记录登记一个学生一张试卷上一个项目的失分,如果这张试卷有10项,那么在这个表里这个学生就有十条记录。
    个人觉得:a方案由于项目数(试卷题数)的可变性,不好操作,我个人的初步想法是预设20题(一般一张试卷不会超过20题)。b方案太繁琐,数据汇增添太多冗余数据,且sql将变得很复杂
    不止以上两个方案哪个好!
    其实个人倾向于a方案,但由于设计思路一道题目就是一个字段,但题目数是可变的,而字段却不好变化,不知该如何操作!
      

  3.   

    a方案,虽然没太明白啊
    你可以在学生试卷表建一标识列,加班级表、学生表、试卷表的FK
    再建一张试卷失分表加学生试卷表的标识列为FK,记录失分情况。
      

  4.   

    我认为B方案比较好一点(按照我个人的理解)
    因为在表中存放的不是项目(题目)的失分,得分情况,数据类型是一致的,只要充分利用好索引(如果是SQLServer的话,建好簇索引),一点也不繁琐而A方案,正如你说的,
    如果题目超过20题呢?(怎么保存多出来的题目信息)
    如果题目不足20题呢?(空间浪费)