数据库与数据表设计

当打卡系统使用时间较长后就会积攒大量的打卡信息,因此有必要通过数据库来存储数据。数据库可以高效地对大量数据进行增、删、改、查操作。

数据库分析

本系统使用 MySQL 数据库,要规范数据内容和格式,建立统一模型。

若把软件的使用者设定为 “公司”,那把打卡者身份可设定为 “员工”,程序中的数据模型就应该包括员工模型。

每位员工都有姓名,姓名就作为员工类中必备的数据之一。因为员工可能会重名,所以必须使用另一种标记作为员工身份的认证,即为每一位员工添加不会重复的员工编号。员工编号的格式为从 1 开始递增的数字,每添加一位新员工,员工编号就 +1。

系统中必须保存所有员工的照片用于人脸识别。为了区分每位员工的照片文件,系统使用 “员工特征码.png” 的规则为照片文件命名。因为员工编号复杂性较低,并且长度不统一,某些情况下容易发生混淆(如编号为1、11、111),所以不推荐使用员工编号作为特征码。特征码应该是一种长度一致、复杂性高、不重复的字符串。建议采用 UUID 作为特征码。

员工与编号、姓名、特征码是一对一的关系,但员工与打卡记录是一对多的关系,因此打卡记录要与员工信息分开存储。员工与打卡记录的 ER 图如图24.3所示。

因为在系统中删除员工属于敏感操作,所以需要给用户设置权限。普通用户只可以打卡,管理员才可以对员工进行删减。系统中需要为管理员用户添加数据模型,管理员用户只包含两个属性:用户名和密码。管理员用户的 ER 图如图24.4所示。

image 2024 03 06 21 33 45 108
Figure 1. 图24.3 员工与打卡记录的ER图
image 2024 03 06 21 34 06 174
Figure 2. 图24.4 管理员用户的ER图

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

image 2024 03 06 21 34 49 365
Figure 3. 图24.5 作息时间的ER图

数据表设计

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

image 2024 03 06 21 35 36 468
Figure 4. 表24.1 系统使用的所有表

下面分别介绍这4个表的表结构设计。

(1)员工信息表的名称为 t_emp,主要用于存储员工个人的详细信息,其结构如表24.2所示。

image 2024 03 06 21 36 12 098
Figure 5. 表24.2 t_emp员工信息表

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

image 2024 03 06 21 36 43 091
Figure 6. 表24.3 t_lock_in_record员工打卡记录表

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

image 2024 03 06 21 37 21 033
Figure 7. 表24.4 t_user管理员用户表表

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

image 2024 03 06 21 38 26 580
Figure 8. 表24.5 t_work_time作息时间表