我有一个非常标准的考勤数据库设计,但我想在学生遇到一定数量的缺席时收到警报。我正在考虑使用一个点系统,每个缺席会积累一定数量的点(在学生表本身上跟踪),它会抛出一条消息。该数据库目前在Access 2003中,但我可能会在不久的将来将其移至MS SQL Server。
这是我的设计理念,只是想确保它的逻辑和规范化。我加粗了我最关心的专栏。
tblAttendance -
tblEventEnrollment -
tblEvents -
tblEventTypes -
tblStudents -
修改 在tblStudents中使用CurrentPoints列基于两个因素:
允许我重置积分。我还考虑在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。
答案 0 :(得分:2)
快速浏览一下,为什么会有事件:
FK EventType
而不是
FK EventTypeID
在我看来,如果学生参加该活动,他们只会错过一个活动,所以不是在学生表中的int CurrentPoints,而是从注册到出勤的LEFT JOIN获得积分,以找到错过的活动。