单位的人事管理系统数据库课程设计
数据库原理及应用课程设计
设计报告
题目:某单位的人事管理系统
学号: 8
学生姓名:
指导教师:
提交时间: 2015-01-04
目录
第1章需求分析.................................... 错误!未定义书签。
需求调查...................................... 错误!未定义书签。
系统功能分析.................................. 错误!未定义书签。
面对用户需求分析.............................. 错误!未定义书签。第2章面向对象分析和设计.......................... 错误!未定义书签。第3章逻辑结构设计................................ 错误!未定义书签。
类和对象向关系模式转换.......................... 错误!未定义书签。第4章数据库物理结构设计.......................... 错误!未定义书签。
存取方法设计............................... 错误!未定义书签。
存储结构设计.................................. 错误!未定义书签。
物理设计...................................... 错误!未定义书签。第5章数据库完整性设计............................ 错误!未定义书签。
主键及唯一性索引.............................. 错误!未定义书签。
参照完整性设计................................ 错误!未定义书签。
Check约束..................................... 错误!未定义书签。
触发器设计.................................... 错误!未定义书签。第6章数据库视图设计.............................. 错误!未定义书签。第7章数据库存储过程设计.......................... 错误!未定义书签。总结................................................ 错误!未定义书签。参考文献:.......................................... 错误!未定义书签。
人事管理系统后台数据库
第1章需求分析
需求调查
通过对各个用户的调查,该人事管理系统有如下需求:
1)员工信息管理:
实现记录在该单位中所有人员的在该单位的员工信息,实现对员工信息的管理,也包括对员工信息的增加、删除、修改等功能。
2)部门信息管理:
实现对该单位中的各个部门的编号、部门相关信息的统计,此时也将单位中的所有人员进行分类管理。
3)职位调动管理:
实现当员工的就职信息发生更改的时候,系统进行相应关联信息的更改,即增加相应的修改信息的同时,员工的信息管理中的对应信息进行修改。
4)系统管理人员信息管理:
实现对相应的系统管理人员的帐号、密码等基本信息的管理功能。
5)出勤信息管理:
实现对每一位员工的出勤状况的记录,记录对应的出勤刷卡机号以及出勤时间的信息管理。
6)奖惩管理:
实现针对于不同的奖惩类型、奖惩金额等信息的管理,实现输入奖惩信息的修改相应的工资信息。
7)工资管理:
实现各个员工工资条目信息的管理。
系统功能分析
管理出勤是所需要的出勤记录刷卡机。
9)请假记录管理:
用于记录员工的请假信息,包括员工编号、请假时间、销假时间、请假天数等信息。
10)奖惩记录管理:
用于记录员工的奖惩信息,包括员工编号、奖惩类型、奖惩金额、奖惩时间等信息。
11)工资管理:
用于统计记录员工的工资信息,基本工资、将罚金、时间等。
面对用户需求分析
在该单位的人事管理系统中,最主要的两个功能就是查询信息和管理信息。系统的用户又分为员工和管理人员,因此我将该系统又分为以下若干子系统,包括员工查询子系统、管理员查询子系统、员工信息管理子系统、部门信息管理子系统、信息变更子系统、工资管理子系统,以满足不同用户的不同应用需求。
下面从细分后的各个子系统分析子系统的需求:
1)员工查询子系统:
可供员工查询与自己相关的姓名、职位、部门等基本信息,以及
各个时期的工资、奖金罚款的发放情况。
2)管理员查询子系统
可供管理员查询所管理员工的全面信息,具有管理权限。
3)员工信息管理子系统
当员工自身的基本情况,如家庭关系变更时,可由员工自行进行修改相关信息。
4)部门信息管理子系统
部门的管理员可对该部门的相关信息进行管理,执行查询、增加、删除、修改等操作。
5)信息变更子系统
员工提交相应修改信息,则将所有该员工的相关信息进行修改。6)工资管理子系统
对奖罚金额及基本工资、结算工资进行管理。
第2章面向对象分析和设计
类和对象设计如下:
第3章逻辑结构设计局部E-R图
图员工
图个人经历
图家庭关系
图部门
图职位调动
图工资
图管理人员
图刷卡机
图出勤
图请假记录
图奖惩记录
全局E-R图:
类和对象向关系模式转换
1、员工(员工编号,姓名,性别,出生日期,学历,身份证号,民族,职称,部门号,职务)
2、个人经历(年份,员工编号,学习经历,任职经历)
3、家庭关系(关系编号,员工编号,亲属关系,亲属姓名)
4、管理人员(管理员帐号,职工编号,密码,级别)
5、出勤(出勤号,员工编号,上班日期,上班时间,下班时间,刷卡机号)
6、刷卡机(刷卡机号)
7、部门(部门号,部门名,领导人员,员工人数)
8、职位调动(调动编号,员工编号,调动前职务,调动后职务,调动前部门号,调动后部门号,调动日期,批复日期,调动原因)
9、奖惩记录(奖惩编号,员工编号,奖惩类型,奖惩金额,奖惩日期,批复部门号,批复日期,奖惩原因)
10、请假记录(请假编号,员工编号,请假时间,销假时间,请假天数,审批人编号)
11、工资(工资编号,员工编号,基本工资,罚款,奖金,结算工资,起始日期,截止日期,发信日期)
第4章数据库物理结构设计
4.1存取方法设计
数据库系统是多用户共享的系统,对同一个关系要建立多条存储路径才能满足多用户的多种应用要求。对于人事管理系统来说,为了提高某些属性(如:员工编号,管理员帐号,员工基本信息等)的查询速度,可以选择聚簇存取的方法,即把这些属性上具有相同值的元组集中放在连续的物理块上。这样在查询某个学院或是查询某个专业或某学年等的学生成绩或选课等时就会大大提高查询速度。因此,该系统中选择聚簇存取方法。
存储结构设计
人事管理系统是一个大型复杂的计算机网络信息系统,采用基于浏览器/服务器(B/S),客户端/服务器(C/S)混合的应用体系结构来建设教务管理系统。数据库管理系统采用Microsoft 公司推出的SQL Server 2000 或以上版本,并用SQL进行数据库的建立和数据库中数据的维护和查询。
物理设计
实现该设计的环境为Windows XP Professional + MS SQL Server 2005 或以上版本。
1、建立员工信息表
create table 员工
(
员工编号 char(4) primary key,
姓名 char(10) not null,
性别 char(2) check(性别 in('男','女')),
出生日期 datetime,
学历 varchar(32) not null,
身份证号 varchar(32) not null,
民族 varchar(16) not null,
职称 char(10),
部门号 char(4)
)
2、建立个人经历表
create table 个人经历
(
年份 datetime,
员工编号 char(4),
学习经历 varchar(50),
任职经历 varchar(50),
primary key(年份, 员工编号),
foreign key(员工编号) references 员工(员工编号)
)
3、建立家庭关系表
create table 家庭关系
(
关系编号 char(10) primary key,
员工编号 char(4) not null,
亲属关系 char(4),
亲属姓名 char(10),
亲属性别 char(2),
foreign key(员工编号) references 员工(员工编号)
)
4、建立管理人员表
create table 管理人员
(
管理员账号 char(4) primary key,
职工编号 char(4) not null,
密码 char(6) not null,
级别 char(4)check(级别 in ('管理员','系统管理员')), foreign key(职工编号) references 员工(员工编号)
)
5、建立出勤表
create table 出勤
(
出勤号 char(6) primary key,
员工编号 char(4) not null,
上班日期 datetime,
上班时间 datetime,
下班时间 datetime,
刷卡机号 char(4),
foreign key(员工编号) references 员工(员工编号)
foreign key(刷卡机号) references 刷卡机(刷卡机号) )
6、建立刷卡机表
create table 刷卡机
(
刷卡机号 char(4) primary key
)
7、建立部门表
create table 部门
(
部门号 char(4) primary key,
部门名 char(10) not null,
领导人员 char(4) not null,
员工人数 int
)
8、建立职位调动表
create table 职位调动
(
调动编号 char(6) not null,
员工编号 char(4) not null,
调动前职务 char(10),
调动后职务 char(10),
调动部门号 char(4) not null,
调动日期 datetime,
批复日期 datetime,
调动原因 varchar(50),
foreign key(员工编号) references 员工(员工编号), foreign key(调动部门号) references 部门(部门号), )
9、建立奖惩记录表
create table 奖惩记录
(
奖惩编号 char(6) not null primary key,
员工编号 char(4) not null,
奖惩类型 char(4),
奖惩金额 money,
奖惩日期 datetime,
批复部门号 char(4),
批复日期 datetime,
奖惩原因 varchar(50),
foreign key(员工编号) references 员工(员工编号), foreign key(批复部门号) references 部门(部门号) )
10、建立请假记录表
create table 请假记录
(
请假编号 char(6) not null primary key,
员工编号 char(4) not null,
请假时间 datetime,
销假时间 datetime,
请假天数 int,
审批人编号 char(4),
foreign key(员工编号) references 员工(员工编号) )
11、建立工资表
create table 工资
(
工资编号 char(6) primary key,
员工编号 char(4) not null,
基本工资 money not null,
罚款 money,
奖金 money,
结算工资 money,
起始时间 datetime,
截止时间 datetime,
发信日期 datetime,
foreign key(员工编号) references 员工(员工编号)
)
第5章数据库完整性设计
主键及唯一性索引
5.2参照完整性设计
1、将个人经历表中,将“员工编号”设置为表的外键。
2、在家庭关系中,将“员工编号”设置为表的外键。
3、在管理人员表中,将“员工编号”设置为表的外键。
4、在出勤表中,将“员工编号”设置为表的外键,再将“刷卡机号”设置为外
键。
5、在职位调动表中,将“员工编号”设置为表的外键,再将“部门”号设置为
外键。
6、在奖惩记录表中,将“员工编号”设置为表的外键。
7、在请假记录表中,将“员工编号”设置为表的外键。
8、在工资等表中的将“员工编号”设置为表的外键。
Check约束
1、员工表中,将性别进行check约束:
check(性别 in('男','女'))
2、奖惩记录表中,将奖惩类型进行check约束:
check(奖惩类型 in('奖','惩'))
触发器设计
1、在职位调动表中,建立更改员工职务的触发器
create trigger trigger_职务修改 on 职位调动 for insert
as
declare @new_员工编号 char(10),@new_调动后职务 char(10)
select @new_员工编号=员工编号,@new_调动后职务=调动后职务 from inserted update 员工 set 职务=@new_调动后职务 where 员工编号=@new_员工编号
2、在员工表中,建立插入或删除员工信息时,修改其相应部门的人数
create trigger trigger_增加员工 on 员工 for insert
as
declare @new_部门号 char(4),@new_员工人数 int
select @new_部门号=部门号 from inserted
select @new_员工人数=员工人数 from 部门
update 部门 set 员工人数=@new_员工人数+1 where 部门号=@new_部门号
create trigger trigger_减少员工 on 员工 for delete
as
declare @new_部门号 char(4),@new_员工人数 int
select @new_部门号=部门号 from deleted
select @new_员工人数=员工人数 from 部门
update 部门 set 员工人数=@new_员工人数-1 where 部门号=@new_部门号
3、在职位调动表中,当插入信息时,修改调动部门的人数信息
create trigger trigger_部门人数修改 on 职位调动 for insert
as
declare @new_前部门号 char(10),@new_现部门号 char(10),@new_调动后部门号char(4),@new_员工人数 int,@new_调动前部门号 char(4)
select @new_现部门号=调动后部门号,@new_前部门号=调动前部门号 from inserted select @new_员工人数=员工人数 from 部门
update 部门 set 员工人数=@new_员工人数+1 where 部门号=@new_现部门号
update 部门 set 员工人数=@new_员工人数-1 where 部门号=@new_前部门号
4、在奖惩记录表中,更新奖惩信息时,修改工资表中的对应的奖金、罚款
create trigger trigger_奖金 on 奖惩记录 for insert
as
declare @奖金 money,@奖惩类型 char(2),@员工编号 char(4)
select @奖金=奖惩金额,@员工编号=员工编号,@奖惩类型=奖惩类型 from inserted begin
if(@奖惩类型='奖')
update 工资 set奖金=@奖金 where 员工编号=@员工编号
end
create trigger trigger_罚款 on 奖惩记录 for insert
as
declare @罚款 money,@奖惩类型 char(2),@员工编号 char(4)
select @罚款=奖惩金额,@员工编号=员工编号,@奖惩类型=奖惩类型 from inserted begin
if(@奖惩类型='罚')
update 工资 set 罚款=@罚款 where 员工编号=@员工编号
end
5、在工资表中,奖金、罚款发生变动时,更新相应的结算工资
create trigger [dbo].[trigger_update_a] on [dbo].[工资] for update as begin
if UPDATE(罚款)
update 工资
set 结算工资 = 基本工资-罚款+奖金
from 工资
end
create trigger [dbo].[trigger_update_a] on [dbo].[工资] for update as begin
if UPDATE(奖金)