我有三张桌子 期间
--------------------------------
ID StartDate EndDate Type
--------------------------------
1 2013-01-01 2013-01-01 D
2 2013-01-02 2013-01-02 D
出席率
---------------------------------------------------
ID PeriodID UploadedBy uploadDateTime Approved
--------------------------------------------------
1 1 25 2013-01-01-11:00 1
2 1 54 2013-01-01-10:00 1
出勤明细
---------------------------------------------
ID EmployeeID AttendanceTime Status AttendanceID
---------------------------------------------
1 24 2013-01-01 09:05 CheckIn 1
1 28 2013-01-01 09:08 CheckOut 2
通过生物加工生成的CSV文件填写出勤数据。 Attendancedetail
可能会随着时间的推移而分组,因为每位员工每天都有多次签出。每个时期period
都会批准出勤率。
Qustion
我需要每个时期的出勤数据。我知道我可以实现joins
。但我必须在AttendenceTime上使用between
过滤器。我想在PeriodID
表中添加AttendenceDetail
以简化查询和未来的性能问题。我应该采用它还是有更好的解决方案
答案 0 :(得分:0)
如果您经常需要根据每个时段的出勤详细信息,所以您通常需要加入三个表,但出勤数据(来自出勤表)对您来说并不那么重要,那么出勤详细信息表中的PeriodID将帮助您肯定的。
即使您需要所有三个表,PeriodID上的where条件也会缩小出勤详细信息的行数,因此它在性能方面也会有所帮助。
维护一个不完全规范化的架构可能有点烦人,但如果这不是一个很大的麻烦,这不会影响你的写作性能,那就去考勤细节中的PeriodID吧。您的选择将会感谢您:)