我有一个非常标准的考勤数据库设计,但我想在学生遇到一定数量的缺席时收到提醒。我正在考虑使用积分系统,每个缺席积累一定数量的积分(在学生桌上本身进行追踪),它会抛出一条消息。该数据库目前在Access 2003中,但我很可能会在不久的将来将其移至MS SQL Server。考勤数据库过量缺勤报警
这是我的设计理念,只是想确保它的逻辑和规范化。我用粗体显示了我最关心的栏目。
tblAttendance -
- PK AttendanceID
- FK事件ID
- FK StudentID
- 日期AttendanceDate
tblEventEnrollment -
- PK EventEnrollmentID
- FK StudentID
- FK的EventID
tblEvents -
- PK的EventID
- FK的EventType
- nvarchar的事件名称
- FK EventLeader
tblEventTypes -
- PK EventTypeID
- nvarchar的事件类型
- INT PointsIfMissed
tblStudents -
- PK StudentID 个
- nvarchar的FistName
- nvarchar的名字
- INT CurrentPoints
EDIT 使用在tblStudents一个CurrentPoints列是基于两个因素:
- 为了避免过多的加入/聚合。一个学生可能每天有10个活动,每年3650个,并且超过10年36,000+个活动出勤记录,以便检查他的分数。(我没有做过任何测试,看看数据集变大后的实际性能影响)
允许我重置点。我还考虑在tblStudents中使用Date LastPointResetDate列,然后使用这些行的查询来计算分数,我只是担心表现(请记住,我想用每个新的出席记录来检查这一点):
SELECT SUM(tblEventTypes.PoinsIfMissed)AS CurrentPoints FROM tblAttendance INNER JOIN tblEvents ON tblAttendance.EventID = tblEvents.EventID INNER JOIN tblEventTypes ON tblEventTypes.EventTypeID = tblEvents.EventTypeID WHERE tblAttendance.AttendanceDate> tblStudents.LastPointResetDate。
你是否打算有些缺席会比其他人赢得更多积分?如果没有,一个积分系统似乎......呃......毫无意义;只要计算缺席的次数。无论哪种方式,我认为您应该在需要时使用查询来获得分数,而不是将计算的值存储在表中。 – HansUp
@HansUp是的,每个事件类型都会有一个独特的缺席分数。因此,例如,缺课是值得比缺少周末学习更值得。 –