一、课题背景和目的
员工管理数据库系统,有助于为对员工数量增多,信息量增大,以及员工部门分配,工资发放等问题实现现代、化网络化管理,能够提高企业管理效率,提高准确度,节约企业成本,提高生产效率。
通过该课题可以熟悉PowerDesigner设计数据库的流程,巩固数据库的设计规则和设计原理,以及对数据库进行多种逻辑查询。
二、数据库的需求分析
通过设计数据库实现对企业员工的基本信息、职位、所属项目、工资等数据进行存储、查询和管理。数据库需要存储员工的基本信息如员工编号、身份证号、联系方式、所属部门信息、工资信息等,还要对员工参与的项目信息进行存储,如项目编号,项目名称,项目起止时间等。
系统开发首先通过PowerDesigner设计物理模型,并将设计好的模型转换为可执行的SQL代码。通过SQL Server 创建数据库,并加入相关数据,在数据库中完成查询管理工作。
系统的开发过程中使用 PowerDesigner16.5和 SQL Server 2014实现。
三、数据库概念模型构造
模型中包含五个实体,实体名称以及属性如下:
员工信息表:员工编号、员工姓名、身份证号、性别、手机号、邮箱;
公司部门表:部门编号、部门名称、负责人工号;
部门职位表:职位编号、职位名称;
项目表:项目编号、项目名称、开启时间、结束时间;
工资表:出纳编号、基本工资、五险一金、绩效奖金、补贴、加班费。
(以上加有下划线的属性为表的主键属性)
根据以上实体设计的数据库系统ER图如下图图1所示:
图 1系统ER图
四、数据库逻辑设计说明
一个公司部门中可以包含多个员工,每个员工只能属于一个公司部门,因此员工与公司部门的关系为N:1.
一个公司部门内可以多个职位,每个特定职位只能属于一个部门,因此公司部门与部门职位的关系为1:N.
每个员工可以属于不同部门的相同职位,及同一个职位可以对应多个员工,而每个员工只能由一个职位,因此部门职位与员工的关系为1:N.
每个员工都对应一个工资单,每个工资单只能属于一个员工,因此员工表与工资表的关系是1:1.
每个员工可以参与多个项目,每个项目可以由多个员工参与,因此员工表与项目表的关系是N:M.
五、数据库物理设计说明
1:1的关系如员工信息表和工资表,可将员工信息表的主键设置为工资表的外键,也可将工资表的主键设置为员工信息表的外键
1:N的关系如公司部门表和员工信息表,公司部门表为1的一方,员工信息表为N的一方,需要将公司部门表的主键设为员工信息表的外键。
M:N的关系如员工信息表和项目表,需要建立一个联系表(员工和项目关系表)将员工信息表的主键和项目表的主键分别设为员工和项目关系表的外键。
系统设计物理模型图如下图图2所示:
图 2物理模型图
六、数据库及表的创建实施过程
通过PowerDesigner生成可执行的SQL文件,其操作过程如下图图3所示:
图 3生产SQL文件
在SQL server 2014 中创建一个EmploySystem数据库,然后在该数据库中运行PowerDesginer生产的SQL文件,来创建表,SQL代码如下图所示:
图 4SQL代码
表的结构生成后,需要为每个表添加数据,截图如下:
公司部门表数据如图5:
图 5公司部门表
员工信息表数据如图6:
图 6员工信息表
部门职位表数据如图7:
图 7部门职位表
项目表数据如图8:
图 8项目表
员工和项目关系表数据如图9:
图 9员工和项目关系表
工资表数据如图10:
图 10工资表
七、涉及到相关业务逻辑的单表查询及多表查询
(1)查询所有员工信息:
SQL语句如下:
select * from Employee_info
执行结果如下:
(2)查询20100101员工的工资信息:
SQL语句如下:
select * from Salary_info where employee_id='20100101'
执行结果如下:
(3)查询20100101员工所在的部门和职位:
SQL语句如下:
select employee_id, deparment_name , position_name
from Department_info ,position_info, Employee_info
where employee_id='20100101' and Employee_info.department_number = Department_info.department_number
and position_info.position_number = Employee_info.position_number
执行结果如下:
(4)查询20100101员工所分配的项目:
SQL语句如下:
select Employee_info.employee_id, employee_name, Project_info.project_number, project_name
from Employee_info ,Project_info, employee_project_r
where Employee_info.employee_id='20100101' and Employee_info.employee_id=employee_project_r.employee_id
and employee_project_r.project_number = Project_info.project_number
执行结果如下:
八、涉及到相关业务逻辑的存储过程和触发器设计
(1)创建存储过程“stuff_pr”,查询员工号为“20100101”的员工所有的相关信息
SQL语句如下:
create procedure stuff_pr as
select distinct * from Employee_info as e
left join Department_info on e.department_number = Department_info.department_number
left join position_info on e.position_number = position_info.position_number
left join employee_project_r on e.employee_id = employee_project_r.employee_id
left join Project_info on employee_project_r.project_number = Project_info.project_number
left join Salary_info on e.employee_id = Salary_info.employee_id
where e.employee_id='20100101'
执行结果如下:
SQL语句如下:
exec stuff_pr
(2)创建触发器“project_del”,当删除项目表里的项目时,对应的雇员与项目关系表中的数据也同时删除。
SQL语句如下:
create trigger ep_project_del
on employee_project_r
after delete
as
if exists(select * from Project_info,deleted where Project_info.project_number = deleted.project_number)
begin
delete from Project_info
where Project_info.project_number in (select project_number from deleted)
end
执行结果如下:
SQL语句如下:
delete from employee_project_r
where project_number = '1901'
执行结果如下:
SQL语句如下:
select * from employee_project_r
执行结果如下:
SQL语句如下:
select * from Project_info
执行结果如下:
九、心得体会
通过本次数据设计,熟悉了PowerDesigner设计数据库的流程,更加深化了对数据库的设计规则和设计原理的理解,提高了动手设计数据库的能力。通过对数据库中简单少数数据的操作验证了数据库设计的合理性,在实际项目中可以通过验证来完善数据库。
在对数据库进行操作的过程中,提高了对SQL语句的掌握程度,加深了对存储过程和触发器的理解。通过数据库来管理和查询数据能够很大程度地提高工作效率。
十、相关参考文献
[1]雷景生,叶文珺,楼越焕.数据库原理及应用(第2版)[M].北京:清华大学出版社,2015