我是SQL的新手,我正在尝试创建一个可用于Hibernate的数据库模式,但我担心扩展问题,数据访问和查询数据的最佳方式。
项目: 学校评分系统
背景 想要存储所有作业,但是如果我们预定一所学校有4000名学生,每个学校有大约182天的课程。如果每天有分级作业(在课堂+作业中),那么每个作品可以有182 x 6 x 4000表示每学年有~4.3M等级。 10年内约为43.7万。
我应该能够显示每季度和当前成绩的所有作业。我也应该能够在上学的任何一年(一次一个季)获得这些。教师和管理员应该能够从所有存储的历史记录中检索(一次一次)。
问题:
Q1可扩展性 是否会出现性能问题? 表格增长到100M条目是否存在任何问题?
数据访问 有没有更好的方法来分割数据? 考虑在作业中的日期(即季度)之间检索每个学生的成绩数据。我应该为quarterID添加另一列并创建一个表来存储它们吗?
访问等级: 查询学生季度成绩的最佳方法是什么?
当然它会伴随着
我知道可以使用SQL连接语句将这两个连接到另一个GradedAssignment类中:
此架构是否正确?
(从下面添加更新)
注意:为简洁起见,省略了许多表列。
学生
- 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
- 姓名
- 说明
获得成绩的最佳方式是什么?
或使用JOIN ???
答案 0 :(得分:1)
考虑到学校的动态,我认为你的架构必须增加一些内容。例如学生每年从一堂课转到另一堂课。还必须考虑这些条件,以建立可持续的应用。
我认为一个好的架构是 -
<强>学生强>
<强> StudentClass 强>
<强>类强>
<强> TeacherClass 强>
<强>教师强>
<强>分配强>
<强>等级强>
你对(assignmentid,studentid)的复合主键是正确的,也是外键。