代码之家  ›  专栏  ›  技术社区  ›  tom

如何优化此数据库设计?

  •  2
  • tom  · 技术社区  · 15 年前

    我正在创建一个应用程序,该应用程序可以生成学生在校期间表现的统计信息。为了实现这一点,我需要存储学生所获得的每一个等级。

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

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

    5 回复  |  直到 8 年前
        1
  •  11
  •   D'Arcy Rittich    15 年前

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

    相反,您可以使用 Course , Grade ,及 SubGrade 桌子。课程将有名称,年级和子年级将有类型。这将给你很大的灵活性。

        2
  •  2
  •   iChaib    15 年前

    在当前的设计中增加另一个等级或另一门课程太难了

    事实上,最好有4个表格,‘学生’、‘成绩’、‘课程’和注释”。

    • 学生桌上摆着所有的学生 需要关于学生的信息,

    • 每个学生都属于某一特定的群体

    • 每个等级包含几个等级
      “课程”(例如英语、数学……)在 特定时刻
    • 每门课程有0+个笔记(例如。
      阅读,听英语,…)
        3
  •  1
  •   Paul Tomblin    15 年前

    不必为每门课程单独设置一个表,只需为所有课程设置一个表,并将课程id和学生id作为主键。

        4
  •  1
  •   Paul Creasey    15 年前

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

        5
  •  1
  •   Chris Pitman    15 年前

    Online Analytical Processing (OLAP ). 报告查询往往涉及大量数据,这使得它们的优化与标准数据库完全不同。数据往往是 . 这使得将事务数据与报告数据分开非常重要。如果您尝试对用于让教师输入成绩、学生查看小的成绩集等的相同数据进行报告,则数据库操作将被拖动,因为它是为OLAP或OLTP设计的次优数据库。

    实现这一点的标准方法是使用一个数据库来存储非规范化数据,该数据由您的网站/事务系统使用。然后使用其中一个OLAP工具构建数据仓库,并使用 ETL 以一定的时间间隔(如每天一次)处理,以将新的事务数据加载到报告数据库中。

    ...