2010-01-02 75 views
2

我正在创建一个应用程序,为学生的学业生涯表现生成统计信息。为了达到这个目标,我需要存储学生获得的每一个成绩。我该如何优化这个数据库设计?

但我不知道如何最佳地存储这些信息。这是一个初步设计,但不知道它在实践中会如何运作。 database design

所以每个学生在完整的16年教育后,将有288个等级数据,每年18个。除此之外,还有他们的个人信息,其中包含他们的姓名,出生日期等。

那么,我怎样才能最佳地保存这些数据呢?

回答

11

您的设计太具体。每次评分方案改变或添加新课程时,您都需要更改模式!

取而代之,您可以使用Course,GradeSubGrade表进行抽象设计。课程将具有名称,而成绩和SubGrades将具有类型。这会给你很大的灵活性。

1

不是每个课程都有独立的表格,只需要一张表格,所有课程的课程编号和学生编号都是主键。

1

我要做的第一件事是反规范化它,取大约10个表格,并用1个表格和主题列替换它们。查询和扩展将成为一场噩梦。

2

这将是太难添加另一个级别或当前设计的另一场

其实,这将是更好的有4个表,“学生”,“等级”,“课程” &“笔记” 。

  • 学生表保存所有的学生 需要的信息,

  • 每个学生在给定时刻属于某个
    “等级”

  • 每个等级包含若干
    给定时间
  • 每门课程有0+笔记(例如:
    阅读,听英语,...)
1

这听起来像你想要做的是什么报告,也被称为Online Analytical Processing (OLAP)。报告查询往往会触及大量数据,使得它们的可视化与标准数据库完全不同。数据趋于大规模非标准化。这使得保持交易数据与报告数据分离的重要性。如果您尝试报告用于让教师输入成绩的相同数据,学生将查看一小部分成绩等,则数据库操作将因为对OLAP或OLTP设计不理想而拖延。

执行此操作的标准方法是使用一个数据库存储非规范化数据,该数据库将用于您的网站/事务性系统。然后,您使用其中一个OLAP工具构建数据仓库,并以某个固定间隔(如每天一次)使用ETL进程将新的事务数据加载到报告数据库中。

...

现在,这一切都是假设,这是一个fiarly大的项目,你有你的手显著的时间,你想获得真正深入到数据仓库的概念,如星型模式和类似。

+0

只是回头看过去的帖子,我想我应该让你知道我继续做下去。在研究和实施OLAP系统方面有惊人的几个月,学习过的负载。该项目得到了几乎满分,并且在当地一所学校得到了积极使用。感谢您的回答! – tom 2012-03-02 01:11:32