3 回答
TA贡献1786条经验 获得超11个赞
如果是我,数据库表会是这样:
id employeeid submittime
在这个数据表里只有打卡时间的概念,没有上班下班的概念。这样做的好处是数据库只记录了员工的原始行为,员工刷卡的时候只要无脑的insert就可以了。判断用户某天有没迟到/早退也很简单,把他当天的所有记录取出来在程序里搞就可以了,不需要去写很复杂的SQL语句。至于有人说每次打卡都查一条数据,会不会很浪费之类的话,你可以想像下:全球最大的公司能有多少员工,就算每个员工都很健忘每天打个好几次卡,能有多少数据。1W个人的公司,每个人每天打4次卡,每天才4W条数据,3年才到1000W,这个数量级数据库根本不需要太考虑优化。需要考察某人某月的迟到/早退次数,全部加载到内存中最多就100条记录,毫无压力。如果后面的打卡记录会覆盖之前的呃打卡记录,这么做也许不会让你的系统产生什么异常,但是严格来讲这样丢失了数据。我想象一个非常非常夸张的场景:你们公司建立了非常完善的员工行为分析系统,通过考勤记录你发现,员工A每天早上8点打卡,晚上6点打卡,但是经常发现员工A在晚上6点打卡之后,又多次在8点9点又打卡进入了公司,到深夜才离开。由此可以推测是不是他的项目经常有突发状况呢?员工B在早上8点前打卡之后的10几分钟内,又打了一次卡,这种情况多次发生。由此推测员工B是否比较健忘,或者有焦虑症(总是担心自己没打卡/担心出门没关门)?等等……当然这种可能跟你的系统毫无关系,我的意思是说你留着原始数据真的一点坏处都没有。
TA贡献1828条经验 获得超13个赞
用逻辑去判断。数据库只是记录。
记录了上班时间。查询出来 下班的时候读取当天的上班时间值,比对下。有异常做异常的事情,没异常了保存下下班的时间。
程序是逻辑加算法。其实和数据库真没关系。
- 3 回答
- 0 关注
- 777 浏览
添加回答
举报