1

我正在尝试定义一个表格来存储在线成绩单的学生成绩。不过,我无法决定如何去做。

成绩是按学科给出的,在三个月内。每个学期都有一个平均成绩,总缺课和“恢复成绩”(我不知道英语的正确术语,但如果你低于平均水平,这是一个额外的测试,试图提高你的成绩) ,我还必须存储年平均和最终“恢复成绩”。基本上,它是这样的:

      |1st Trimester      |2nd Trimester      |3rd Trimester
Subj. |Avg.  |Mis.  |Rec  |Avg.  |Mis.  |Rec  |Avg.  |Mis.  |Rec  |Year Avg.  |Final Rec.
Math  |5.33  |1     |4    |8.0   |0           |7.0   |2           |6.5        |7.0
Sci.  |5.33  |1     |4    |8.0   |0           |7.0   |2           |6.5        |7.0

我可以将此信息存储在单个数据库行中,每一行如下所示:

1tAverage | 1tMissedClasses | 1tRecoveringGrade | 2tAverage | 2tMissedClasses | 2tRecoveringGrade

依此类推,但我认为这将是一种痛苦,如果学校决定按双学期或其他时间评分(就像它过去一直到 3 年前一样)。
我还可以概括表格字段,并使用 tinyint 来标记这些成绩是哪个学期的,或者它们是否是年终总决赛。但是这个会要求很多子查询来写成绩单,维护起来也很痛苦。

两者哪个更好,还是有其他方法?谢谢

4

4 回答 4

5

你可以尝试用你的表来构造它。我没有所有的信息,所以我对你可能需要什么或用它做什么做了一些猜测。

时间段:

  • 身份证号(INT)
  • PeriodTimeStart(日期时间)
  • PeriodTimeEnd(日期时间)
  • 名称(VARCHAR(50)

学生们:

  • 身份证号(INT)
  • 名字(VARCHAR(60))
  • 姓(VARCHAR(60))
  • 生日(日期时间)
  • [添加了任何其他相关的学生领域信息......如联系信息等]

等级:

  • 身份证号(INT)
  • 学生ID(INT)
  • 等级值(浮点数)
  • 时间段ID(INT)
  • IsRecoveringGrade(布尔值)

错过的课程:

  • 身份证号(INT)
  • 学生ID(INT)
  • 类ID(INT)
  • 时间段ID(INT)
  • 错过日期(日期时间)

课程:

  • 身份证号(INT)
  • 类名 (VARCHAR(50))
  • 类描述(文本)
于 2008-10-31T17:45:11.667 回答
0

我认为最好的解决方案是每个周期存储一行。所以你会有一张像这样的桌子:

grades
------
studentID
periodNumber
averageGrade
missedClasses
recoveringGrade

因此,如果是 2 个学期,那么您将有第 1 和第 2 期。我建议使用第 0 期来表示“全年总体”。

于 2008-10-31T17:30:04.880 回答
0

最好有第二个表代表学期,并从成绩表中获得对学期的外键引用(并将各个成绩存储在成绩表中)。然后使用 SQL 函数 SUM 和 AVG 计算平均值、错过的课程等。

于 2008-10-31T17:32:49.350 回答
0

这想到了。

(但说真的,在太多的桌子上犯错,而不是太少。Handruin 有我迄今为止看到的最好的解决方案)。

于 2008-10-31T17:46:52.223 回答