【问题标题】:How would I optimize this database design?我将如何优化这个数据库设计?
【发布时间】:2010-12-31 19:03:00
【问题描述】:

我正在创建一个应用程序,该应用程序可以为学生在学校生涯中的表现生成统计信息。为了实现这一点,我需要存储学生曾经获得的每个成绩。

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

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

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

【问题讨论】:

    标签: database database-design normalization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      与其为每门课程分别设置一个表,不如为所有课程设置一个表,其中课程 ID 和学生 ID 作为主键。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          在当前设计中添加另一个年级或另一个课程太难了

          实际上,最好有 4 个表格,“学生”、“成绩”、“课程”和“笔记”。

          • Students 表包含所有 需要学生的信息,

          • 每个学生都属于某个
            给定时刻的“成绩”

          • 每个等级包含几个
            “课程”(例如英语、数学...)在 给定的时刻
          • 每门课程都有 0+ 个注释(例如
            阅读、听英语……)

          【讨论】:

            【解决方案5】:

            听起来您想要做的是报告,也称为Online Analytical Processing (OLAP)。报告查询往往会涉及大量数据,从而使它们的优化与您的标准数据库完全不同。数据往往被大量非规范化。这使得您将交易数据与报告数据分开非常重要。如果您尝试对用于让教师输入成绩、学生查看小组成绩等的相同数据进行报告,那么数据库操作将会拖累,因为它针对 OLAP 或 OLTP 的设计并不理想。

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

            ...

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

            【讨论】:

            • 只是回顾旧帖子,并认为我应该让你知道我继续这样做。花了几个月的时间研究和实施 OLAP 系统,学到了很多东西。该项目几乎获得满分,并在当地一所学校积极使用。感谢您的回答!
            猜你喜欢
            • 2013-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多