数据库人力资源管理系统.docx
- 文档编号:6034675
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:13
- 大小:41.79KB
数据库人力资源管理系统.docx
《数据库人力资源管理系统.docx》由会员分享,可在线阅读,更多相关《数据库人力资源管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
数据库人力资源管理系统
人力资源管理系统数据库设计与实现
所完成的工作:
数据库整体结构设计
需求分析
ER图绘制
完成数据库的物理设计
SQL语句编写和上机检验
系统名称:
人力资源管理系统
一、系统需求分析
1、该“人力资源管理系统”只是对数据库应用技术的一个样本数据库的实例,重在对数据库一些方法的熟悉与掌握,其中包括从数据库的概念模型到ER图的绘制,再到数据库模式的建立(即为数据神农百草膏第三代库及其基本表的建立),而后数据的录入,最后完成一些简单的关系运算表达式的表达和相关的Select查询语句的使用。
2、系统结构简述
本系统包括6个实体:
总经理、经理、员工、部门、指标、工资
实体之间的关系转换为5个表:
职务表、部门表、员工表、考核表、工资表
其中,实体部分有3个表:
员工表、部门表、工资表
员工与指标间多对多关系转换为考核表
注:
各个基本表中关键字已在关系模式中说明
3、实现的功能
1)通过表的创建过程进行数据的关联和约束
创建多个约束、规则、默认值对数据进行安全性管理(详见物理设计)
创建检查约束(用到case…when语句分情况),检验员工编号的合理性,即通过编号可以体现他的部门(A为总经理,B为经理,C为员工)
2)插入、修改、删除功能
本系统有5个表:
员工表、部门表、职务表、考核表、工资表。
其中员工表、部门表、职务表是基本表,数据直接、完全输入。
考核表、工资表与员工表有外键联系,且有计算列,需要创建存储过程来插入数据。
◎建立2个存储过程,进行考核表、工资表的插入
◎建立一个存储过程,考虑外键联系,删除某员工的全部信息
◎建立触发器,当添加、删除数据时会显示
3)查询功能
◎使用select语句实现简单查询和复杂查询
并创建存储过程进行查询
◎创建视图,通过视图来查询
二、ER图
注:
总经理与经理的属性ER图与员工相同
员工的职务属性通过员工编号体现,规则见“职务表”
三、关系模式
系统中的实体有:
总经理、经理、员工、部门、指标、工资
为简化关系模式,将总经理、经理、员工的信息集中到一个表。
关系模式如下:
职务表(职务名称、职务编号、基本工资、基本奖金)
部门表(部门编号、部门名称、经理编号、办公电话)
员工表(员工编号、员工姓名、部白兔牌暗疮膏门编号、职务、出生日期、年龄、入职日期、性别、学历、电话)
考核表(员工编号、本月出勤次、本月业绩、本月考核)
工资表(员工编号、基本工资、基本奖金、计算工资、所得税、本月实发工资)
四、物理设计
职务表结构
属性名
数据类型
说明
职务名称
char(6)
主键
职务编号
char
(2)
notnull
基本工资
int
基本奖金
int
说明:
职务表为基本表,直接输入数据。
其中,职务编号A、B、C分别为总经理、经理、员工的员工编号的首字母(如,经理B01,员工C03)
部门表结构
属性名
数据类型
说明
部门编号
char
(2)
主键
部门名称
char(6)
notnull
经理编号
char(4)
经理电话
char(12)
说明:
部门表为基本表,直接输入数据。
员工表结构
属性名
数据类型
说明
员工编号
char(4)
主键;检查约束
员工姓名
char(6)
notnull
部门编号
char
(2)
外键
职务
char(6)
职务规则
性别
char
(2)
notnull;性别规则
出生日期
datetime
notnull
年龄
int
入职日期
datetime
notnull
学历
char(4)
学历规则;默认约束
电话
char(12)
说明:
1、员工表与部门表有外键联系,部门编号是部门表的主键;直接输入数据
2、员工编号是主键,并有检查约束,确认输入的员工编号合理。
具体是员工编号的首字母与职务对应的编号一致,如,总经理编号为AXX,经理BXX,员工CXX
3、职务与规则“职务_rule”绑定,取值范围(“总经理”“'经理”“员工”)
4、公式:
年龄=year(getdate())-year(出生日期)
5、性别与规则“性别_rule”绑定,取值范围(“男”“'女”)
6、学历与规则“学历_rule”绑定,取值范围(“博士”“'硕士”“学士”),默认值学士
考核表结构
属性名
数据类型
说明
员工编号
char(4)
主键;外键
本月出勤次
int
notnull;默认值
本月业绩
int
notnull
本月考核
int
主键
说明:
1、考核表与员工表有外键联系;用表约束定义联合主键
2、本月考核为计算列,公式本月考核=本月业绩*本月出勤次。
创建存储过程“insert考核表”实现输入数据,
3、本月出勤次与默认“default本月出勤次”绑定,默认值为30
工资表结构
属性名
数据类型
说明
员工编号
char(4)
主键;外键
基本工资
int
notnull
基本奖金
int
notnull
计算工资
int
所得税
int
本月实发工资
int
主键
说明:
1、考核表与员工表有外键联系;用表约束定义联合主键
2、后三列为计算列,公式:
计算工资=基本工资+本月考核*基本奖金/50
所得税=计算工资*0.05
本月实发工资=计算工资-所得税
其中,本月考核是考核表中该员工对应的考核
创建存储过程“insert工资表”实现输入数据
五、系统实现
--创建数据库"人力资源管理系统DB"
createdatabase人力资源管理系统DB
on
(name=人力资源管理系统DB_dat,
filename='e:
\人力资源管理系统DB_dat.mdf',
size=5120kb,
maxsize=kb,
filegrowth=1024kb
)
logon
(name='人力资源管理系统DB_log',
filename='e:
\人力资源管理系统DB_log.ldf',
size=1024kb,
maxsize=kb,
filegrowth=1024kb
)
use人力资源管理系统DB
--创建表
createtable职务表
(职务名称char(6)notnullprimarykey,
职务编号char
(2)notnull,
基本工资int,
基本奖金int,
)
createtable部门表
(部门编号char
(2)notnullprimarykey,
部门名称char(6)notnull,
经理编号char(4),
经理电话char(12)
)
createtable员工表
(员工编号char(4)notnullprimarykey,
员工姓名char(6)notnull,
部门编号char
(2),
职务char(6),
性别char
(2)notnull,
出生日期datetimenotnull,
年龄int,
入职日期datetimenotnull,
学历char(4),
电话char(12),
constraintfk_员工表_部门表_key
foreignkey(部门编号)references部门表(部门编号),
constraintfk_员工表_职务表_key
foreignkey(职务)references职务表(职务名称)
)
createtable考核表
(员工编号char(4)notnull,
本月出勤次intnotnull,
本月业绩intnotnull,
本月考核int,
constraintpk_考核表_keyprimarykey(员工编号,本月考核),
constraintfk_员工表_考核表_key
foreignkey(员工编号)references员工表(员工编号)
)
createtable工资表
(员工编号char(4)notnull,
基本工资intnotnull,
基本奖金intnotnull,
计算工资int,
所得税int,
本月实发工资int,
constraintpk_工资表_keyprimarykey(员工编号,本月实发工资),
constraintfk_员工表_工资表_key
foreignkey(员工编号)references员工表(员工编号)
)
--为员工表建立检查约束,保证输入的员工编号合理
altertable员工表withnocheck
addconstraintck_员工编号check
(substring(员工编号,1,1)=
case
when职务='总经理'then'A'
when职务='经理'then'B'
when职务='员工'then'C'
end
)
go
--建立职务规则、学历规则、性别规则,并与员工表绑定
createrule职务_ruleAS@职务in('总经理','经理','员工')
go
execsp_bindrule职务_rule,'员工表.职务'
go
createrule学历_ruleAS@学历in('博士','硕士','学士','大专')
go
execsp_bindrule学历_rule,'员工表.学历'
go
createrule性别_ruleAS@性别in('男','女')
go
execsp_bindrule性别_rule,'员工表.性别'
go
--建立学历默认值约束,与员工表对应列绑定
createdefault学历_defaAS'学士'
go
execsp_bindefault学历_defa,'员工表.学历'
go
--建立本月缺勤次默认值约束,与考核表对影列绑定
createdefault本月出勤次_defaAS'31'
go
execsp_bindefault本月出勤次_defa,'考核表.本月出勤次'
go
--输入员工表、职务表、部门表数据
insert职务表values('总经理','A','50000','5000')
insert职务表values('经理','B','10000','5000')
insert职务表values('员工','C','3000','1000')
insert部门表values('D1','销售部','B01','')
insert部门表values('D2','采购部','B02','')
insert部门表values('D3','人事部','B03','')
insert部门表values('D','总经理','A01','')
insert员工表values('A01','***','D','总经理','女','','','','硕士','')
insert员工表values('B01','','D1','经理','女','','','','博士','')
insert员工表values('B02','','D2','经理','女','','19','','硕士','')
insert员工表values('B03','赵某','D3','经理','男','','21','','博士','')
insert员工表values('C01','钱某','D1','员工','女','','22','','学士','')
insert员工表values('C02','孙某','D1','员工','男','','21','','硕士','')
insert员工表values('C03','李某','D1','员工','男','','24','','学士','')
insert员工表values('C04','周某','D1','员工','男','','26','','大专','')
insert员工表values('C05','吴某','D2','员工','女','','19','','学士','')
insert员工表values('C06','郑某','D2','员工','男','','20','','硕士','')
insert员工表values('C07','王某','D2','员工','男','','25','','博士','5')
insert员工表values('C08','冯某','D3','员工','女','','29','','博士','')
insert员工表values('C09','陈某','D3','员工','女','','20','','硕士','')
--查看员工表、职务表、部门表数据
select*from员工表
select*from职务表
select*from部门表
go
--创建存储过程,用于输入考核表、工资表的数据
createprocedureinsert考核表@员工编号char(4),@本月出勤次int,@本月业绩int
as
insert考核表values(@员工编号,@本月出勤次,@本月业绩,@本月业绩-5*@本月出勤次)
go
createprocedureinsert工资表@员工编号char(4),@基本工资int,@基本奖金int
as
begin
declare@本月考核int
set@本月考核=(select本月考核from考核表where员工编号=@员工编号)
insert工资表values(@员工编号,@基本工资,@基本奖金,
@基本工资+@本月考核*@基本奖金/50,
(@基本工资+@本月考核*@基本奖金/50)*0.05,
(@基本工资+@本月考核*@基本奖金/50)*0.95)
end
go
--输入考核表、工资表数据
execinsert考核表A01,31,95
execinsert考核表B01,31,95
execinsert考核表B02,30,80
execinsert考核表B03,31,55
execinsert考核表C01,31,100
execinsert考核表C02,27,95
execinsert考核表C03,31,95
execinsert考核表C04,31,85
execinsert考核表C05,29,75
execinsert考核表C06,31,95
execinsert考核表C07,28,80
execinsert考核表C08,31,30
execinsert考核表C09,29,70
execinsert工资表A01,50000,5000
execinsert工资表B01,10000,5000
execinsert工资表B02,10000,5000
execinsert工资表B03,10000,5000
execinsert工资表C01,3000,1000
execinsert工资表C02,3000,1000
execinsert工资表C03,3000,1000
execinsert工资表C04,3000,1000
execinsert工资表C05,3000,1000
execinsert工资表C06,3000,1000
execinsert工资表C07,3000,1000
execinsert工资表C08,3000,1000
execinsert工资表C09,3000,1000
--查看考核表、工资表数据
select*from考核表
select*from工资表
go
--创建存储函数删除某一员工的信息
createprocedure删除员工@员工编号char(4)
as
begin
delete考核表where员工编号=@员工编号
delete工资表where员工编号=@员工编号
delete员工表where员工编号=@员工编号
end
go
--创建触发器
createtriggertr_deleteon员工表fordelete
as
declare@numvarchar(50)
select@num=str(@@rowcount)+'个学生被删除'
select@num
return
go
createtriggertr_inserton员工表forinsert
as
declare@numvarchar(50)
select@num=str(@@rowcount)+'个学生被添加'
select@num
return
go
--检验触发器
exec删除员工A01
go--删除数据,检验触发器
insert员工表values('A01','','D','总经理','女','','20','','硕士','')
go--恢复数据
--创建索引
createnonclusteredindex员工编号_idxon员工表(员工编号)
--创建存储过程进行简单查询和复杂查询
--查询员工业绩,按业绩降序排列
createprocedure查询员工业绩降序排列AS
select员工表.员工编号,员工表.员工姓名,考核表.本月业绩
from员工表innerjoin考核表on员工表.员工编号=考核表.员工编号
orderby考核表.本月业绩desc
exec查询员工业绩降序排列
go
--查询所有的研究生名单
createprocedure查询所有研究生名单按部门分组AS
select部门表.部门名称,员工表.员工姓名,员工表.学历
from员工表innerjoin部门表on员工表.部门编号=部门表.部门编号
where员工表.学历='博士'or员工表.学历='硕士'
exec查询所有研究生名单按部门分组
go
--建立视图进行查询
createview查询员工所有个人信息AS
select员工表.员工编号,员工表.员工姓名,部门表.部门名称,员工表.职务,员工表.性别,员工表.出生日期,员工表.年龄,员工表.入职日期,员工表.学历,员工表.电话,
from部门表innerjoin员工表on员工表.部门编号=部门表.部门编号
createprocedure查询员工所有个人信息_procAS
select*from查询员工所有个人信息
exec查询员工所有个人信息_proc
go
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 人力资源 管理 系统