员工考勤管理系统数据库设计
1 概述
1.1 设计背景
随着企业的规模不断扩大,企业人事管理的日趋复杂和企业人员的增多,而目前许企业管理仍停留在人工管理阶段,重复工作较多、工作量大、效率低、不易统计、成本高和易出错等弊端,已经无法适应现代企业的需求。因此,迫切需要开发基于网络的员工考勤管理系统来提高管理工作的效率。将传统的人工考勤管理计算机化,能够有效的帮助企业实现“公正考勤,高效薪资”,使企业的管理水平登上一个新的台阶。
企业考勤管理经过如下的业务流程:
1. 员工基本信息管理,增加,删除,修改
2. 员工的出勤记录,上下班打卡时间,缺勤记录。
3. 员工的请假记录,请假开始时间和结束时间,请假类型。
4. 员工的加班记录,加班开始时间和结束时间,加班类型。
5. 员工的出差记录,出差起始时间和结束时间,出差类型。
6. 用户基本信息管理,增加,删除,修改。
1.2 研究目的
以中小型企业的考勤管理业务为依托,结合科学管理的理论,设计并开发一个员工考勤管理系统, 提供一个科学合理的考勤管理解决方案。
系统目标如下:
1. 提供更加便捷、简单的操作。
2. 优化企业原有的考勤管理制度,为不同管理层次提供对应的功能。
3. 节省考勤管理的成本、提高企业考勤管理的透明度和效率。
4. 对系统提供必要的权限管理。
5. 为企业实现整体信息化的其他相关系统提供必要的数据支持。
1.3 理论基础的分析
本设计利用SQL server 2012建立数据库,表格化存储,利用表的查询,连接,修改,删除数据等管理员工信息,对数据库设定必要的权限,只有具有权限的人才能进行查看,修改数据。
1.4 预期结果和意义
考勤系统能实现员工日出勤记录,出差信息,请假信息,加班的信息的功能。
本考勤系统建立了一个高效率的、便捷的考勤管理系统,能够有效的帮助企业实现“公正考勤,高效薪资”,使企业的管理水平登上一个新的台阶。
2 需求分析
2.1 功能需求
(1)用户管理模块
增加一名系统使用的用户,同时设置密码和权限,当此用户要更改密码时,可以在修改密码模块中进行。但是必须具有一定权限才能进行此项操作。当某些员工离职或者因某中缘故,不能再使用考勤系统,可以将该用户删除。修改拥护权限,使其具有访问某些模块的权限或者限制其访问某些模块的权限。所有系统使用用户都可以修改密码,以维护系统安全。
(2)基本资料管理模块
增加、删除和修改员工基本资料。
增加、删除和修改每日正常上班的信息。
增加、删除和修改加班、出差、请假的信息。
统计表某日的员工迟到次数。
2.2 数据流图
2.3 功能模块图
3 概念结构设计
3.1 局部E-R 图
(1)员工E-R 图
(2)图3.2 为出勤E-R 图
(3)图3.3 为加班E-R 图
(4)出差E-R 图
(5)请假E-R 图
(6)管理员E-R 图
3.2 整体E-R 图
4 逻辑结构设计
4.1 关系模式
用户表(用户名,员工编号,权限名,用户密码,权限号)
权限表(权限名,用户管理,资本资料更改,加班管理,出差出管理,请假管理,修改考勤资料,数据库操作,日志删除)
员工表(员工编号,姓名,性别,年龄,联系方式,邮箱,考勤)
出勤表(记录号,员工编号,上午上班时间,上午下班时间,下午上班时间,下午下班时间,记录时间)
加班表(记录号,员工编号,姓名,加班类型,起始时间,结束时间)
出差表(记录号,员工编号,姓名,出差类型,起始时间,结束时间)
请假表(记录号,员工编号,姓名,请假类型,起始时间,结束时间)
日志表(记录号,用户名,操作,日期)
统计表(日期,记录号,用户名,迟到次数)
4.2 数据关系图
如图所示,在数据库中生成的关系图中,员工编号是员工表的主键,是其他表的外键。
5 物理结构设计
5.1 存储记录结构设计
在物理结构中,数据的基本存取单位是存储记录。有了逻辑结构以后,就可以设计存储记录结构, 一个存储记录可以与多个逻辑记录相对应。存储记录就包括记录的组成,数据项的类型和长度等。
(1)用户表包含用户名,员工编号,权限名,用户密码,权限号。
(2)权限表包含权限名,用户管理,资本资料更改,加班管理,出差出管理,请假管理,修改考勤资料,数据库操作,日志删除。
(3)员工表包含员工编号,姓名,性别,年龄,联系方式,邮箱,考勤。
(4)出勤表包含记录号,员工编号,上午上班时间,上午下班时间,下午上班时间,下午下班时间,记录时间。
(5)加班表包含记录号,员工编号,姓名,加班类型,起始时间,结束时间。
(6)出差表包含记录号,类型名,员工编号,姓名,出差类型,起始时间,结束时间。
(7)请假表包含记录号,员工编号,姓名,请假类型,起始时间,结束时间。
(8)日志表包含记录号,用户名,操作,日期。
(9)统计表包含日期,记录号,用户名,迟到次数
6 数据库实施
6.1建立数据库
代码如下:
create database work
on
( name=work_data,
filename='d:\program files (x86)\sql\work.mdf',
size=5,
filegrowth=1
)
log on
( name=work_log,
filename='d:\program files (x86)\sql\work_log.ldf',
size=1,
maxsize=50,
filegrowth=10%
)
6.2数据表的创建
(1) 用户表的创建
不同用户有不同的权限。代码如下:
create table 用户 (
用户名 char(30) not null,
员工编号 char(20) null,
权限名 char(30) null,
用户密码 int not null,
权限号 int not null,
primary key (用户名)
)
(2) 权限表的创建
权限表是用来确定某一权限类型所能访问的系统模块。代码如下:
create table 权限表 (
权限名 char(30) not null,
用户管理 char(2) not null,
基本资料更改 char(2) not null,
加班管理 char(2) not null,
出差管理 char(2) not null,
请假管理 char(2) not null,
修改考勤资料 char(2) not null,
数据库操作 char(2) not null,
日志删除 char(2) not null,
primary key (权限名)
)
(3) 员工表的创建
为了判断某个员工是否已经考勤,在员工基本资料表中的另一个字段,字段名为“考勤”,每天考勤前,将此字段值都设为0,每考勤一个员工,则将其字段值该为1,以后操作时根据其字段判断其是否已经考勤。代码如下:
create table 员工表 (
员工编号 char(30) not null,
姓名 char(30) not null,
性别 char(2) not null,
年龄 int not null,
联系方式 char(20) null,
邮箱 char(30) null,
考勤 tinyint not null,
primary key (员工编号)
)
(4) 出勤表的创建
出勤表用来记录员工每天实际上下班时间。这张表保存的数据是考勤的依据。代码如下:
create table 出勤表 (
记录号 int not null,
员工编号 char(20) not null,
上午上班时间 datetime not null,
上午下班时间 datetime not null,
下午上班时间 datetime not null,
下午下班时间 datetime not null,
记录日期 datetime not null,
primary key (记录号)
)
(5) 加班表的创建
加班表用来保存员工的加班信息。代码如下:
create table 加班表 (
记录号 int not null,
员工编号 char(20) not null,
姓名 char(30) not null,
加班类型 char(30) not null,
起始时间 datetime not null,
结束时间 datetime not null,
primary key (记录号)
)
字段格式如下所示
(6) 出差表的创建
出差表是用来保存员工的出差记录。代码如下:
create table 出差表 (
记录号 int not null,
员工编号 char(20) not null,
姓名 char(30) not null,
出差类型 char(30) not null,
起始时间 datetime not null,
结束时间 datetime not null,
primary key (记录号)
)
(7) 请假表的创建
请假表是用来保存员工的请假记录。代码如下:
create table 请假表 (
记录号 int not null,
员工编号 char(20) not null,
姓名 char(20) not null,
请假类型 char(30) not null,
起始时间 datetime not null,
结束时间 datetime not null,
primary key (记录号)
)
(8) 日志表的创建
每一个实用的数据库应用系统,总是少不了日志管理。日志是用来记录系统的使用情况,以便当系统遭到非法使用时,能够从日志表中找到使用记录,以便进行处理。代码如下:
create table 日志表 (
记录号 binary(8) not null,
用户名 char(30) not null,
操作 char(127) not null,
日期 datetime not null,
primary key (记录号)
)
(9) 统计表的创建
用户有时会需要去查询一下哪天是否迟到的情况,统计表就很方便的提供了这一功能。代码如下:
create table 统计表 (
日期 datetime not null,
记录号 binary(8) not null,
用户名 char(30) not null,
迟到次数 char(127) not null,
)
6.3 建立存储过程
(1) 增加数据的存储过程
insert into 出差表(记录号,类型名 ,员工编号,姓名,外出类型,起始时间,结束时间)values('119','出差', 'a80','邓月','出差',2015-06-24,2015-06-29)
查询出差表所有数据select * from 出差表
结果如下:
(2) 查询数据的存储过程
查询出差表所有数据select * from 加班表
结果如下:
(3) 修改数据的存储过程
修改前数据select * from 出差表结果如下:
将出差表中名字改为周清代码如下:
update 出差表
set 姓名 = '周清'
where 记录号=120
修后前数据select * from 出差表结果如下:
(4) 删除数据的存储过程
由于公司领导决定,张峰不能出差,要删除存储的数据
修改前数据select * from 出差表结果如下:
修改后数据结果如下:
6.4创建触发器
(1) 创建一个触发器,当删除员工基本信息时,时也删除其他表中员工的信息。如当删除员工表中信息时,也删除出差表中的内容,出勤表,加班表,请假表分别建立此类触发器。
create trigger data_del
on 员工表
after delete
as begin delete 出差表
where 员工编号 in(select 员工编号 from deleted)
删除员工前查询到的数据
删除员工刘江后查询到的数据