我有一個非常標準的考勤數據庫設計,但我想在學生遇到一定數量的缺席時收到提醒。我正在考慮使用積分系統,每個缺席積累一定數量的積分(在學生桌上本身進行追蹤),它會拋出一條消息。該數據庫目前在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是的,每個事件類型都會有一個獨特的缺席分數。因此,例如,缺課是值得比缺少週末學習更值得。 –