我该如何优化这个数据库设计?

时间:2010-01-02 14:23:39

标签: database database-design normalization

我正在创建一个应用程序,为学生在学校生涯中的表现生成统计信息。为了实现这一点,我需要存储学生所达到的每个年级。

但我不知道如何以最佳方式存储这些信息。这是一个初步的设计,但不知道它将如何在实践中保持。 database design

因此,每完成16年教育后,每名学生将获得288个年级数据,每年18个。除此之外,还有他们的个人信息,其名称为DOB等。

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

5 个答案:

答案 0 :(得分:11)

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

相反,您可以使用CourseGradeSubGrade表格进行抽象设计。课程将有名称,等级和子等级将有类型。这会给你很大的灵活性。

答案 1 :(得分:2)

在当前设计中添加其他成绩或其他课程会非常困难

实际上,最好有4个表,“学生”,“成绩”,“课程”和“注释”。

  • 学生表中包含所有内容 所需的学生信息,

  • 每个学生都属于某个 在某一特定时刻“成绩”

  • 每个等级包含几个
    “课程”(例如英语,数学......)at 给定的时刻
  • 每门课程都有0+笔记(例如 阅读,听英语,......)

答案 2 :(得分:1)

不是每个课程都有一个单独的表,而是只有一个表用于所有课程,其中包含课程ID和学生ID作为主键。

答案 3 :(得分:1)

我要做的第一件事是对它进行非规范化,取大约10个表并用1个表和一个主题列替换它们。现在,查询和扩展将是一场噩梦。

答案 4 :(得分:1)

听起来你想要做的就是报告,也称为Online Analytical Processing (OLAP)。报告查询往往涉及大量数据,使得它们的验证与标准数据库完全不同。数据往往是大规模非规范化。这使得将交易数据与报告数据分开是很重要的。如果您尝试报告用于让教师输入成绩的相同数据,学生查看小成绩等,数据库操作将被拖动,因为它已经针对OLAP或OLTP进行了次优设计。

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

...

现在,这是假设这是一个非常大的项目,你手上有大量时间,并且你想深入了解数据仓库概念,如星型模式等。