我有一个表,其中包含学生成绩记录,这些记录与通过班级记录表创建的ID分组。
它具有三个评分成分,即书面作品,绩效任务和季度考试,每个成分都有自己的成分权重,具体取决于科目类型(例如,一种科目类型的书面作品占期末成绩的25%,绩效任务占季度成绩的45%,每季度考试30%)
但是,这些组件的权重可能会发生变化,这就是我想要做的。
我如何确保新的组件权重仅影响新创建的班级记录(下学年等创建),而旧的班级记录将保持创建时处于活动状态的组件权重。
这是表格的样子(列名不是那么长,但是我只使用完整的单词以便于理解)
classrecord
-ClassID
-SubjectID
-SchoolyearID
-MaxWrittenWorksGrade
-MaxPerformanceTaskGrade
-MaxQuarterlyExaminationGrade
grades
-RecordID
-StudentID
-ClassID
-WrittenWorksGrade
-PerformanceTaskGrade
-QuarterlyExaminationGrade
-FinalGrade
subjects
-SubjectID
-SubjectName
-SubjectTypeID
subjecttype
-SubjectTypeID
-SubjectTypeName
-SubjectTypeWeightID
subjtypeweight
-SubjectTypeWeightID
-WrittenWorksWeight
-PerformanceTaskWeight
-QuarterlyExaminationWeight
如您所见,在计算过程中,表subjtypeweight通过classrecord> subject> subjtype> subjtypeweight引用
我只是一名学生,我想出的设计可能会出现问题,但是我很高兴能提供反馈以改善这一点。
非常感谢您与我保持联系,我很难解释我的要求,所以请问我问题中是否有任何令人困惑或遗漏的内容,谢谢。
最佳答案
这是一个经典的基于时间的数据问题。
看起来您的subjtypeweight
表包含具有开始和结束生效日期的行。该表的每一行可能只有效一年。然后,您可以在该表中添加SchoolyearID
列,并使该表的主键成为SubjectTypeWeightID, SchoolyearID
的组合。然后,使用包含一系列JOINs
的查询,如下所示。
FROM classrecord c
JOIN subjects s ON c.ClassID = s.ClassID
JOIN subjecttype st ON s.SubjectTypeID = st.SubjectTypeID
JOIN subjtypeweight stw ON st.SubjectTypeWeightID = stw.SubjectTypeWeightID
AND c.SchoolyearID = stw.SchoolyearID
请注意最后一个
ON
子句的两部分,由AND
连接。他们将从您的subjtypeweight
表中提取正确的行。您需要为每个新学年插入新的subjtypeweight行,才能使用此方法。通过在
subjtypeweight
中添加而不是添加两列(SchoolyearID
和LastSchoolyearID
),您可以摆脱每年这样做的麻烦。允许LastSchoolyearId
包含空值。然后在查询中使用它。 FROM classrecord c
JOIN subjects s ON c.ClassID = s.ClassID
JOIN subjecttype st ON s.SubjectTypeID = st.SubjectTypeID
JOIN subjtypeweight stw
ON st.SubjectTypeWeightID = stw.SubjectTypeWeightID
AND c.SchoolyearID >= stw.SchoolyearID
AND (stw.LastSchoolyearID IS NULL OR c.SchoolyearID <= stw.LastSchoolyearID)
那是一个复杂的
ON
子句。但这是为了根据有效期的第一年和最后一年(如果有)从subjtypeweight
列中选择正确的行。如果要更新权重,请通过显示有效的上一个学年来更新现有行以“退休”它。然后插入新行,显示该行有效的第一年。 (不要让您的有效年份重叠,否则您的
JOIN
操作将产生太多记录。)不用担心性能。 SQL是为此编写的。
我是通过阅读Richard Snodgrass教授关于在SQL中开发基于时间的应用程序的书中学到的。 Snodgrass博士慷慨地将其以PDF格式提供。 https://www2.cs.arizona.edu/~rts/publications.html