需要学校评分系统的架构

时间:2013-02-23 00:38:41

标签: sql hibernate schema

我是SQL的新手,我正在尝试创建一个可用于Hibernate的数据库模式,但我担心扩展问题,数据访问和查询数据的最佳方式。

项目: 学校评分系统

背景 想要存储所有作业,但是如果我们预定一所学校有4000名学生,每个学校有大约182天的课程。如果每天有分级作业(在课堂+作业中),那么每个作品可以有182 x 6 x 4000表示每学年有~4.3M等级。 10年内约为43.7万。

我应该能够显示每季度和当前成绩的所有作业。我也应该能够在上学的任何一年(一次一个季)获得这些。教师和管理员应该能够从所有存储的历史记录中检索(一次一次)。

问题:

Q1可扩展性 是否会出现性能问题? 表格增长到100M条目是否存在任何问题?

数据访问 有没有更好的方法来分割数据? 考虑在作业中的日期(即季度)之间检索每个学生的成绩数据。我应该为quarterID添加另一列并创建一个表来存储它们吗?

访问等级: 查询学生季度成绩的最佳方法是什么?

  • 成绩[] getStudentGrades(studentid,startdate,enddate)

当然它会伴随着

  • Assignment [] getAssignmentDetails(Grade [] grade)

我知道可以使用SQL连接语句将这两个连接到另一个GradedAssignment类中:

  • GradedAssignment [] getStudentGradedAssignement(studentid,startdate,enddate)

此架构是否正确?  (从下面添加更新)
注意:为简洁起见,省略了许多表列。

  

学生
    - studentid (PK)

     

StudentClass (参考表)
    - classid(FK)
    - studentid(FK)

     

教师
    - teacherid (PK)

     

TeacherClass (参考表)
    - teacherid (PK)
    - classid

     

成绩(我能想到的唯一主键是assignmentid + studentid复合)
    - assignmentid(FK)
    - 等级
    - classid
    - studentid(FK)

     

分配
    - assignmentid (PK)
    - teacherid(FK)
    - 积分可能
    - assignDate
    - dueDate
    - 姓名
    - 说明

获得成绩的最佳方式是什么?

  • SELECT Assignment.pointsPossible,Assignment.name,Grade.grade FROM Grade,Assignment WHERE grade.studentid =:id AND Grade.assignmentid == Assignment.assignmentid AND Assignment.assignDate< :dateFinish AND Assignment.assignDate> :dateStart;

或使用JOIN ???

  • SELECT Assignment.pointsPossible,Assignment.name,Grade.grade FROM Grade LEFT JOIN assignmentid赋值WHERE grade.studentid =:id AND Assignment.assignDate< :dateFinish AND Assignment.assignDate> :dateStart;

1 个答案:

答案 0 :(得分:1)

考虑到学校的动态,我认为你的架构必须增加一些内容。例如学生每年从一堂课转到另一堂课。还必须考虑这些条件,以建立可持续的应用。

我认为一个好的架构是 -

<强>学生

  • studentid(主键)
  • 姓名
  • 名字
  • DATE_OF_BIRTH
  • ....(记录所需的所有其他基本个人信息)

<强> StudentClass

  • studentid(外键引用student.studentid)
  • classid(外键引用class.classid)
  • admissiondate
  • ...(所有其他与入学或晋升学生有关的信息)

<强>类

  • classid(主键)
  • 类名
  • ...(与课程相关的所有其他信息)

<强> TeacherClass

  • teacherid(外键引用teacher.teacherid)
  • classid(外键引用class.classid)
  • assigndate
  • RELEASEDATE
  • ...

<强>教师

  • teacherid(主键)
  • 姓名
  • 名字
  • 资格
  • DATE_OF_BIRTH
  • ...

<强>分配

  • assignmentid(主键)
  • assigning_teacherid(外键引用teacher.teacherid)
  • pointsPossible
  • assignDate
  • 的dueDate
  • 名称
  • 描述
  • ...

<强>等级

  • assignmentid(fk)
  • classid(fk)
  • studentid(fk)
  • 等级
  • ...

你对(assignmentid,studentid)的复合主键是正确的,也是外键。