gpt4 book ai didi

database - 将出勤率存储在数据库中

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:00 24 4
gpt4 key购买 nike

我有 4 个学期的学生,我很关心他们每个科目的出勤率。不同学期的学生被分组。每个批处理都可以选择从 36 个受试者中选择一个受试者。

首先,我创建了一个表subject,其中我列出了四个批处理的所有主题以及主题代码。我有另一个表 student,其中有 studentid 和 6 列,其中包含学生选择的主题代码。通过执行连接,我可以知道学生选择了哪个科目。

现在我无法弄清楚如何以干净的方式存储每日出勤率。请提供一种方法,因为我需要存储 365 天和 1500 多个学生的数据。 (部分批处理周日不放假)。

我发现很少有相关主题,包括 Storing attendance records in the database和其他一些人,但我找不到解决方案。

最佳答案

我会有这样的东西:

Subjects( SubjectId PK, Name, etc... )
Classes( ClassId PK, SubjectId, DateTime periodBegin, etc... )
Students( StudentId PK, Name, etc... )
StudentAttendance( StudentId PK, ClassId PK )

Subjects 包含每个科目的记录,Classes 包含学校日历中每个预定类(class)的记录。 Classes 表将需要填充实际的类(class)集合 - 您可以在它们发生时添加它们,也可以在学年开始时批量添加它们。 Students 表是不言自明的,StudentAttendance 表列出了哪些学生积极参加了特定类(class)。

不要认为像 StudentAttendance 这样的表是糟糕的设计 - 这是多对多连接表的典型示例。一些数据库在连接表中有数十亿行并不罕见,但因为它只包含两个键值(大概是 int32 或 int64),所以它不会占用太多磁盘空间。

下面是一个查找哪些学生没有参加特定类(class)的查询:

SELECT
Name
FROM
Students
WHERE
StudentId NOT IN (
SELECT
StudentId
FROM
StudentAttendance
INNER JOIN Classes ON StudentAttendance.ClassId = Classes.ClassId
WHERE
StudentAttendance.ClassId = @classId
)

这是一个查询,它获取每个参加特定科目的学生的出勤率。将其除以 ( SELECT Count(*) FROM Classes WHERE Classes.SubjectId = @subject ) 得到每个学生的出勤率。如果学生从未参加过任何类(class)(故意或因为他们没有注册),那么他们将不会出现在列表中。

SELECT
Students.Name
COUNT(*) As AttendanceCount
FROM
StudentAttendance
INNER JOIN Classes ON Classes.ClassId = StudentAttendance.ClassId
INNER JOIN Students ON Students.StudentId = StudentAttendance.StudentId
GROUP BY
StudentId
WHERE
Classes.SubjectId = @subjectId

关于database - 将出勤率存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com