数据库与数据表设计
当打卡系统使用时间较长后就会积攒大量的打卡信息,因此有必要通过数据库来存储数据。数据库可以高效地对大量数据进行增、删、改、查操作。
数据库分析
本系统使用 MySQL 数据库,要规范数据内容和格式,建立统一模型。
若把软件的使用者设定为 “公司”,那把打卡者身份可设定为 “员工”,程序中的数据模型就应该包括员工模型。
每位员工都有姓名,姓名就作为员工类中必备的数据之一。因为员工可能会重名,所以必须使用另一种标记作为员工身份的认证,即为每一位员工添加不会重复的员工编号。员工编号的格式为从 1 开始递增的数字,每添加一位新员工,员工编号就 +1。
系统中必须保存所有员工的照片用于人脸识别。为了区分每位员工的照片文件,系统使用 “员工特征码.png” 的规则为照片文件命名。因为员工编号复杂性较低,并且长度不统一,某些情况下容易发生混淆(如编号为1、11、111),所以不推荐使用员工编号作为特征码。特征码应该是一种长度一致、复杂性高、不重复的字符串。建议采用 UUID 作为特征码。
员工与编号、姓名、特征码是一对一的关系,但员工与打卡记录是一对多的关系,因此打卡记录要与员工信息分开存储。员工与打卡记录的 ER 图如图24.3所示。
因为在系统中删除员工属于敏感操作,所以需要给用户设置权限。普通用户只可以打卡,管理员才可以对员工进行删减。系统中需要为管理员用户添加数据模型,管理员用户只包含两个属性:用户名和密码。管理员用户的 ER 图如图24.4所示。


计算考勤报表时需要确定公司的上班时间和下班时间,这两个时间是要存储在数据库里的,因此把这两个时间命名为作息时间。作息时间的ER图如图24.5所示。

数据表设计
经过数据库分析之后,数据库中需要存储 4 种数据,分别为员工信息、打卡信息、管理员用户和作息时间。因此,在 MySQL 中创建一个名为 db_time_attendance 的库,在该库中创建与 4 个数据模型对应的表,如表24.1所示。

下面分别介绍这4个表的表结构设计。
(1)员工信息表的名称为 t_emp,主要用于存储员工个人的详细信息,其结构如表24.2所示。

(2)员工打卡记录表的名称为 t_lock_in_record,主要用于存储员工打卡的详细信息,其结构如表24.3所示。

(3)管理员用户表的名称为 t_user,主要用于存储管理员的账号和密码,其结构如表24.4所示。

(4)作息时间表的名称为 t_work_time,主要用于存储上班时间和下班时间的记录,其结构如表24.5所示。
