目录
1 需求分析 1
2 概念结构设计 2
3 逻辑结构设计 3
4 数据库物理设计与实施 5
5 访问系统库 10
6 总结 11
1 需求分析
本系统的主要目的是,明确查询公司职工某年某月的工资情况,通过职工工资管理系统,能明确的察看到从入职以来,每位职工的每月工资情况。同时也能查询到职工本身的一些基本信息。(这次的设计以2021年12月为例)
设计如下面所示的数据项:
职工信息包括职工号,姓名,性别,出生日期,年龄,部门,职位,入职时间;
工资信息包括职工号,工资年份,月份,原始工资,津贴,所得税,最终工资。
2 概念结构设计
概念结构E-R图如下所示。
3 逻辑结构设计
(1)E-R图转换成关系模式如下:
职工(职工号,姓名,性别,出生日期,年龄,部门,职位,入职时间)
F = {职工号→姓名,职工号→性别,职工号→出生日期,职工号→年龄,职工号→部门,职工号→职位,职工号→入职时间}
工资(职工号,工资年份,月份,原始工资,津贴,所得税,最终工资)
F = {职工号→原始工资,职工号→月份,职工号→原始工资,职工号→津贴,职工号→所得税,职工号→最终工资}
考勤(职工号,工资年份,工资月份,某天工资,是否打卡)
F = {职工号→工资年份,职工号→工资月份,职工号→某天工资,职工号→是否打卡}
(2)关系模式中属性的详细说明。
职工信息表(功能:存储包含所有员工的信息;包括职工号,姓名,性别,出生日期,年龄,部门,职位,入职时间)
员工工资表(功能:存储员工的工资情况,包括职工号,工资年份,月份,原始工资,津贴,所得税,最终工资)
字段名 字段类型 字段长度 默认值 备注
员工考勤表(功能:监督员工每天的考勤打卡情况,包括职工号,工资年份,工资月份,某天工资,是否打卡)
4 数据库物理设计与实施
创建数据库
create database SalaryDatabase;
use SalaryDatabase;
创建基本表
use SalaryDatabase;
– 职工表
create table EmployeeTable(
id int primary key auto_increment,
name varchar(32) unique ,# 姓名添加唯一性约束
sex char(5) not null check ( sex='男’or sex=‘女’),
brithday date not null,
age int not null ,
dept varchar(10) not null ,# 部门
post varchar(15) not null ,# 职位
start_data date not null
) character set utf8;
– 添加外键约束
alter table EmployeeTable add foreign key (id) references Employeepayroll (worknumber) ;
desc employeetable; # 查看表结构
show tables;
– 职工工资表
create table Employeepayroll(
worknumber char(15) not null ,
year varchar(10) ,
month varchar(10) ,
wages_job float not null , #工资
allowance float , #津贴
tax float not null , #所得税
real_wages float not null #真实工资
);
为worknumber 添加主键
alter table Employeepayroll add primary key (worknumber);
为worknumber 添加外键
alter table employeepayroll add foreign key (worknumber) references Attendance (worknumber) ;
– 创建考勤表
create table Attendance(
worknumber char(15) not null ,
year varchar(10) ,
month varchar(10) ,
day varchar(10),
iswork varchar(10)
)character set utf8;
– 向职工表中插入数据
insert into employeetable values
(‘0001’,‘张三’,‘男’,(‘1985-01-02’),‘36’,‘研发部’,‘研发部长’,(‘2012-05-11’)),
(‘0002’,‘李四’,‘男’,(‘1986-01-02’),‘35’,‘研发部’,‘员工’,(‘2012-12-18’)),
(‘0003’,‘王五’,‘男’,(‘1990-01-02’),‘31’,‘研发部’,‘项目策划’,(‘2018-05-17’)),
(‘0004’,‘赵翠花’,‘女’,(‘1992-01-02’),‘29’,‘财务部’,‘经理’,(‘2016-03-22’)),
(‘0005’,‘孙玫瑰’,‘女’,(‘1990-06-02’),‘31’,‘人事部’,‘人事部长’,(‘2011-05-11’));
– 向工资表中插入数据
insert into employeepayroll
values (‘0001’,‘2021’,‘12’,‘5400’,‘0’,‘100’,‘5300’),
(‘0002’,‘2021’,‘12’,‘10000’,‘200’,‘100’,‘11000’),
(‘0003’,‘2021’,‘12’,‘5800’,‘80’,‘100’,‘5780’),
(‘0004’,‘2021’,‘12’,‘4000’,‘0’,‘150’,‘3850’);
– 向考勤表中插入数据
insert into attendance values (‘0001’,‘2021’,‘12’,‘20’,‘是’),
(‘0002’,‘2021’,‘12’,‘20’,‘是’),
(‘0003’,‘2021’,‘12’,‘20’,‘是’),
(‘0004’,‘2021’,‘12’,‘20’,‘是’),
(‘0005’,‘2021’,‘12’,‘20’,‘否’),
(‘0001’,‘2021’,‘12’,‘21’,‘是’),
(‘0002’,‘2021’,‘12’,‘21’,‘是’),
(‘0003’,‘2021’,‘12’,‘21’,‘是’),
(‘0004’,‘2021’,‘12’,‘21’,‘是’),
(‘0005’,‘2021’,‘12’,‘21’,‘否’),
(‘0001’,‘2021’,‘12’,‘22’,‘是’),
(‘0002’,‘2021’,‘12’,‘22’,‘是’),
(‘0003’,‘2021’,‘12’,‘22’,‘是’),
(‘0004’,‘2021’,‘12’,‘22’,‘是’),
(‘0005’,‘2021’,‘12’,‘22’,‘是’);
创建视图
create view ep_view as select worknumber,year,month,real_wages from employeepayroll ; #创建工资表真实工资的视图
select * from ep_view; #查看视图
建立和管理索引
为员工生日创建普通索引
create index suo_1 on employeetable(brithday);
show index from employeetable; # 查看employeetable的所有索引
为员工部门和职位创建复合索引
alter table employeetable add index suo_2 (dept,post);
创建一个新表为部门字段添加全文索引
create table new_EmployeeTable(
id int primary key auto_increment,
name varchar(32) unique ,# 姓名添加唯一性约束
sex char(5) not null check ( sex='男’or sex=‘女’),
brithday date not null, #生日
age int not null , #年龄
dept varchar(10) not null ,# 部门
post varchar(15) not null ,# 职位
start_data date not null , # 入职时间
fulltext index suo_3 (dept), # 为dept字段创建全文索引
key using hash(post) # 创建哈希索引
) character set utf8;
drop table new_EmployeeTable; # 删除表
desc new_EmployeeTable; # 查看表结构
show index from new_EmployeeTable; # 查看新表中的索引
show create table new_EmployeeTable; # 查看索引
drop index suo_1 on employeetable; # 删除索引方式一
alter table employeetable drop index suo_1; # 删除索引方式二
创建存储过程
– 创建存储过程
delimiter KaTeX parse error: Expected 'EOF', got '#' at position 40: … (in sid int) #̲in-表示输入参数 sid-表…
delimiter ;
call proc_1(5000); #调用存储过程查询工资表视图中真实工资大于5000的数据
show create procedure proc_1; # 查看存储过程的创建语句
– 创建一个存储过程生成工资报表
delimiter
c
r
e
a
t
e
p
r
o
c
e
d
u
r
e
p
r
o
c
2
(
i
n
s
i
d
1
i
n
t
)
b
e
g
i
n
s
e
l
e
c
t
e
.
i
d
,
e
.
n
a
m
e
,
a
.
m
o
n
t
h
,
A
.
r
e
a
l
w
a
g
e
s
f
r
o
m
e
m
p
l
o
y
e
e
t
a
b
l
e
e
l
e
f
t
j
o
i
n
e
m
p
l
o
y
e
e
p
a
y
r
o
l
l
A
o
n
e
.
i
d
=
A
.
w
o
r
k
n
u
m
b
e
r
w
h
e
r
e
A
.
m
o
n
t
h
=
s
i
d
1
;
e
n
d
create procedure proc_2 (in sid1 int) begin select e.id,e.name,a.month,A.real_wages from employeetable e left join employeepayroll A on e.id=A.worknumber where A.month = sid1; end
createprocedureproc2(insid1int)beginselecte.id,e.name,a.month,A.realwagesfromemployeetableeleftjoinemployeepayrollAone.id=A.worknumberwhereA.month=sid1;end
call proc_2(12); # 调用存储过程显示工资报表
创建触发器
– 创建触发器(当插入一条新记录之前,如果员工真实工资小于5000,则自动更新为正确工资)
create trigger tri_1 before insert on
employeepayroll for each row
begin
if new.real_wages <= 5000 then set new.real_wages=new.wages_job+new.allowance-new.tax;
end if;
end;
drop trigger tri_1; #删除触发器
5 访问系统库
查询操作
查询某个人所得工资,以员工2为例
select id,name from employeetable where id = 2
union
select worknumber,real_wages from employeepayroll where worknumber=2;
(子)查询工资表中真实工资大于5000的员工
select * from employeepayroll where real_wages in (select real_wages from employeepayroll where real_wages>5000);
带比较运算符的子查询(查询工资表中津贴大于200的员工)
select * from employeepayroll where allowance > (select allowance from employeepayroll where allowance=200);
更新操作
1、更新某人的职位
update employeetable set post=‘总经理’ where name=‘李四’;
2、更新工号为4的赵翠花的津贴为250
update employeepayroll set allowance=250 where worknumber=4;
删除操作
1、删除工号为1的员工张三的所有信息
delete from employeetable where name=‘张三’; # 删除张三的员工表信息
delete from employeepayroll where worknumber=0001; # 删除张三的工资表信息文章来源:https://www.toymoban.com/news/detail-480174.html
6 总结
在完成本次课程设计的阶段,我学到了要多主动积极的思考解决问题。有很多同学比较好学,总是不停的在与别人沟通交流,看似很积极,但是仔细分析他提出的那些问题确实没有太大的价值,稍微思考一下就能解决,只有经过自己不断的思考,才能达到课程设计的效果,没有谁一开始就会,都是后天不断的历练的结果。
总的看来,要想高效的完成此次数据库课程设计,首先就要有一个扎实的理论基础,掌握课本上的命令操作、重点概念等。其次,团队的合作也是必不可少的,这需要后期的交流锻炼和信任。一个好的团队往往能够起到事半功倍的效果,我就认为我们团队的整体氛围就很好,很和谐,组员能够积极的完成分配的任务。虽然我们小组还有很多不足之处,但是还是值得肯定的,小组成员都很优秀,我自己也要更加努力,这次的课程设计也是一个很好的锻炼,同时也感谢有这么一个机会来提升团队合作的能力。
在数据库的设计阶段,遇到了很多问题,比如对第三范式的思考,由于理解的不是很透彻,第三范式的构造不是很顺利,在不断的沟通合作下,认识了第三范式的知识,还有在创建公司财务报表的自动汇总生成的时候,尝试了很多的方法,用了触发器,用了函数,在一番权衡之下决定使用存储过程,然后通过调用存储过程来实现每个月份工资报表的汇总情况。
在不断的思考中,我学到了很多的东西,很多宝贵的精神,比如说合作精神,在团队的合作下,每个人都有很大的作用,众人拾柴火焰高,由于合作的完善和良好,才是的我们的进度比想象中的要快。
我们今后定将更加积极向前,力争做到更好!文章来源地址https://www.toymoban.com/news/detail-480174.html
到了这里,关于mysql实现(工资管理系统)课程设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!