打卡签到功能这个表好设计,关键是怎么统计出来一个月应该签到多少天,正常签到多少天,迟到多少天,早退多少天,这样还需要增加什么表来设计好呢?
目前是用户一个表 ,签到一个表。
签到表存了签到时间和签退时间,目前是一天必须一次签到一次签退。
主要是统计这个月1号到当天正常签到多少天,迟到多少天,早退多少天,缺卡多少天(和具体的缺卡日期)。打卡的记录数据库都有这个好计算,关键是缺卡记录怎么存呢?
这个还需要考虑的星期天,这个是否要再加个字段来存一下签到的具体情况,这个字段如何设计呢?
效果如下:而且这个是实时统计的,也就是当月1号到当天的记录。
用户一张表(
User
),签到记录一张表(Sign
),剩下全是算法伪代码:
其中
User.sign
是一个与当月天数等长的短整型数组(可能要postgresql才支持,不支持数组的话可以用字符串存),表示这个用户当月签到情况,比如0表示未签到,1表示正常签到,2表示迟到但未早退,3表示未迟到但早退,4表示迟到且早退。Sign.action
表示签到或签退(或者可以拆成两个表,签到表和签退表)。每次签到的时候,更新这个用户的
sign
字段(算法根据需求自己编写)。月末清空
Sign
表,有必要的话可以将这个月的签到记录保存到文件以供查证。