我以前的做法是做2张表
1张是所有班次的类型表,记录几点到几点上班,周几上班
2张是员工的排班表,记录yyyy-mm-dd到yyyy-mm-dd他是那个班次,如果中间调班,程序自动将一条记录拆分,保持日期上的连续性。考勤表是员工日常的流水表,只记录什么时候打卡上班,什么时候打卡下班的这样做有一个坏处就是一个人一天不能同时有2个班次,所以需要例外表里记录一个例外,这个例外就是用来处理,某人一天同时有几个班次的情况
不过这样做的话,统计的时候sql语句很复杂,呵呵