人事管理系统数据库设计说明书Oracle附带源码.docx
《人事管理系统数据库设计说明书Oracle附带源码.docx》由会员分享,可在线阅读,更多相关《人事管理系统数据库设计说明书Oracle附带源码.docx(29页珍藏版)》请在冰豆网上搜索。
人事管理系统数据库设计说明书Oracle附带源码
人事管理系统
数据库系统设计说明(Oracle部分)
计算机学院-王琪
3130603009
2013-11-13
文档信息:
文档名称
蓝山公司人事管理系统功能说明书(Oracle部分)
描述
该文档描述人事管理系统的详细功能定义,并对模块划分、业务流程进行了定义。
所有设计人员、开发人员、测试人员以及其他团队成员都应该以该文档作为产品的功能定义,并衍生出其他文档
负责人
状态
最终版
项目组成:
测试主管
开发主管
项目经理
文档变更历史:
时间
修改人
章节
描述
所有章节
创建文档初稿
所有章节
文档路径:
相关文档:
文档
路径
测试案例
测试案例.doc
详细设计
详细设计.doc
审核结果:
审核人
意见
签名档
全体团队
通过
测试团队
通过
1
概述
1.1目的
本文为教学案例项目Oracle功能规范说明书。
本说明书将:
●描述数据库设计的目的
●说明数据库设计中的主要组成部分
●说明数据库设计中涵盖的教学知识要点
1.2内容
本文档主要内容包括对数据库设计结构的总体描述,对数据库中各种对象的描述(包括对象的名称、对象的属性、对象和其他对象直接的关系)。
本文档中包含对以下数据库内容的描述:
●数据表
●视图
●存储过程
●用户自定义函数
●触发器
●约束
在数据库主要对象之外,本文还将描述数据库安全性设置、数据库属性设置和数据库备份策略,为数据库管理员维护数据库安全稳定地运行提供参考。
1.3与其他项目的关联
教学案例项目的数据库设计与教学项目(Web部分和Windows部分)功能密切相关。
教学案例项目的数据库将按照教学项目程序部分的功能需求而设计,数据库设计将配合教学案例的程序部分,以实现一个功能完备的企业环境内的应用。
2表
2.1表设计概述
根据教学案例功能,数据库将以员工信息为中心存储相关数据,配合Oracle数据库系统中提供的数据管理,实现员工考勤、请假、加班管理及系统设置等业务功能。
数据库设计将以存储员工信息的员工表为基础,连接多张相关表以实现对以下关系的支持:
●员工与请假申请
●员工与加班申请
●员工与考勤记录
●员工与部门
●员工与部门经理
●员工与业绩评定记录
●员工与薪资
此外数据库中还将记录教学案例应用中需要的全局配置信息和事件日志记录。
数据库系统主要的实体关系如2-0所示。
图20
2.2员工表(t_emploee)
概述
员工表用于记录员工基本信息,并作为基础表与其他表连接。
表定义
员工表定义如表21所示。
表21
主键
员工表的主键是empid字段,类型为number。
外键
员工表的外键有部门id,类型为number,用于与部门表中的部门id字段关联。
部门id字段不可以为空。
员工表的外键有员工类型id,类型为number,用于与员工类型表中的员工类型id字段关联。
员工表的外键有领导id,类型为number,用于与员工表中的员工id字段关联。
索引
主键字段员工id具有自动创建的聚集索引。
2.3部门表(t_department)
员工表定义如表2-2所示。
表22
主键
部门表的主键为部门id。
外键
部门表的外键为部门父id,类型为number,引用部门表的部门id。
索引
主键字段员工id具有自动创建的聚集索引。
2.4员工类型表(empType)
员工类型表定义如表2-3所示。
表23
主键
员工类型表的主键为员工类型id。
2.5请假表(t_leave)
员工类型表定义如表2-4所示。
表24
主键
请假表的主键为请假id。
外键
请假表的外键有员工id,类型为number,用于与员工表中的员工id字段关联。
请假表的外键有领导id,类型为number,用于与员工表中的员工id字段关联。
索引
主键字段请假id具有自动创建的聚集索引。
2.6业绩表(result)
业绩表定义如表2-5所示。
表2-5
主键
业绩表的主键为业绩表id。
外键
请假表的外键有员工id,类型为number,用于与员工表中的员工id字段关联。
索引
主键字段业绩表id具有自动创建的聚集索引。
2.7加班表(overTimeWork)
业绩表定义如表2-6所示。
表2-6
主键
加班表的主键为加班表id。
外键
加班表的外键有员工id,类型为number,用于与员工表中的员工id字段关联。
加班表的外键有审核人员id,类型为number,用于与员工表中的员工id字段关联。
索引
主键字段加班表id具有自动创建的聚集索引。
2.8考情表(attendance)
业绩表定义如表2-7所示。
表2-7
主键
考情表的主键为考情表id。
外键
加班表的外键有员工id,类型为number,用于与员工表中的员工id字段关联。
索引
主键字段考情表id具有自动创建的聚集索引。
字段员工id有聚集索引。
2.9薪资表(salary)
业绩表定义如表2-8所示。
表2-8
主键
薪资表的主键为薪资表id。
外键
薪资表的外键有员工id,类型为number,用于与员工表中的员工id字段关联。
索引
主键字段薪资表id具有自动创建的聚集索引。
3视图
3.1查看员工基本信息(Web)
概述
●此视图通过左外连接员工和部门表得到了员工的详细信息,其中包括员工的基本信息、员工的部门信息和员工经理信息。
●Web用户具有查看的权限。
基表
●员工表
●部门表
视图包含字段
●员工编号
●员工姓名
●员工电子邮件
●员工电话
●员工登录名
●员工报到日期
●员工所属部门编号
●员工自我介绍
●员工照片
●员工剩余假期
●所属部门名称
表:
员工表,部门表
dropviewwq_emploeeInfo;
createviewwq_emploeeInfo(empid,name,mail,phone,comeTime,depid,selfComent,photo,dname,leftLeave)
as
selecte.empid,e.name,e.mail,
e.phone,eTime,d.depid,
e.selfComent,e.photo,d.name,
(e.yearLeaveTime-e.useLeaveTime)
fromt_wq_emploeee,t_wq_departmentd
wheree.depid=d.depid;
概述
●此视图通过员工编号内连接员工考勤表和员工表,得到员工的姓名、员工所属部门编号和考勤情况。
通过这个视图可以按部门编号查到整个部门员工的缺勤情况。
●Web用户具有查看的权限。
基表
●员工考勤表
●员工表
视图包含字段
●考勤编号
●员工编号
●部门编号
●员工姓名
●考勤类型
●到达时间
●日期
dropviewwq_emp_attendance;
createviewwq_emp_attendance(aid,empid,depid,name,type,workTime,atime)
as
selecta.id,e.empid,e.depid,e.name,a.type,a.workTime,sysdate
fromt_wq_emploeee,t_wq_attendancea
wheree.empid=a.empid;
3.2查看员工信息和所属部门名称(Win)
概述
●此视图通过内连接表员工表和部门表,得到员工的详细信息和员工所属部门的名称。
●Windows用户具有查看的权限。
基表
●员工表
●部门表
视图包含字段
●员工编号
●员工姓名
●员工登录名
●员工电子邮件
●部门名称
●员工所属部门编号
●员工电话
dropviewwq_emp_dep_info;
createviewwq_emp_dep_info(empid,emp_name,username,mail,dep_name,depid,photo)
as
selecte.empid,e.name,e.username,e.mail,d.name,d.depid,e.photo
fromt_wq_emploeee,t_wq_departmentd
wheree.depid=d.depid;
4存储过程
4.1插入一条提交的请假申请(Web)
概述
●此存储过程向员工请假表插入一条已提交的请假申请。
●Web用户具有执行权限。
参数
字段名称
字段代码
类型
员工编号
p_empid
整型
提交时间
p_applyTime
日期型
开始时间
p_leavetime
日期型
结束时间
p_backtime
日期型
审核者编号
p_checkEmpid
整型
小时数
p_realtime
整型
请假原因
字符串(100)
返回值
字段
类型
描述
本操作影响的记录数
整型
系统自带的一个参数,返回本次操作影响的记录数
createorreplaceprocedurewq_addNewleave(
p_empidt_wq_leave.empid%TYPE,
p_applyTimet_wq_leave.applyTime%TYPE,
p_leavetimet_wq_leave.leavetime%TYPE,
p_backtimet_wq_leave.backtime%TYPE,
p_checkEmpidt_wq_leave.checkEmpid%TYPE,
p_realtimet_wq_leave.realtime%TYPE,
p_reasont_wq_leave.reason%TYPE
)
is
begin
insertintot_wq_leave(empid,applyTime,leavetime,backtime,checkEmpid,realtime,reason)values(p_empid,p_applyTime,p_leavetime,p_backtime,p_checkEmpid,p_realtime,p_reason);
endwq_addNewleave;
4.2查询员工考勤信息(Win)
概述
●此存储过程根据指定的时间段查询员工考勤信息。
●Windows用户具有执行权限。
参数
字段名称
字段代码
类型
开始时间
p_workTime
日期型
结束时间
p_afterWorkTime
日期型
返回值
字段
类型
描述
p_record
p_record数据集
一个包含按指定查询条件查询得到的员工考勤信息的数据集
createorreplaceprocedurewq_select_attendance(
p_workTimet_wq_attendance.workTime%TYPE,
p_afterWorkTimet_wq_attendance.afterWorkTime%TYPE,
p_recordoutt_wq_attendance%ROWTYPE
)
is
begin
select*intop_record
fromt_wq_attendancea
wherea.workTime>p_workTimeanda.afterWorkTimeendwq_select_attendance;
5用户自定义函数
5.1按部门名称得到本部门所有的员工信息
概述
此用户自定义函数根据部门名称从视图viwEmployeeList中得到本部门所有员工的信息。
参数
字段名称
字段代码
类型
部门名称
p_name
字符串(10)
返回值
字段
类型
描述
员工信息表
p_record
一个包含指定部门的所有员工信息的数据表
createorreplacefunctionwq_getEMP_By_depname(
p_namet_wq_department.name%TYPE,
p_recordoutt_wq_emploee%ROWTYPE)
returnt_wq_emploee%ROWTYPE
is
begin
select*intop_record
fromt_wq_emploeee
wheree.depid=(selectdepidfromt_wq_departmentdwhered.name=p_name);
endwq_getEMP_By_depid;
6触发器
6.1在否决员工请假申请时将请假时间累计返回到请假前的状态
概述
员工请假申请被否决时,之前其年假的总时间已经被减少,否决完成后应该相应增加其年假总时间。
触发器影响范围
员工信息表。
/*触发器员工请假申请被否决时,之前其年假的总时间已经被减少,否决完成后应该相应增加其年假总时间*/
createorreplacetriggerwq_back_before_leave
afterupdateont_wq_leave
FOREACHROW
begin
if(:
new.status<1)
then
updatet_wq_emploeeesete.useLeaveTime=e.useLeaveTime-:
new.realtime
wheree.empid=:
new.empid;
endif;
end;
7数据库安全性
7.1概述
基于项目特点,教学案例项目的安全控制主要由程序代码控制。
Oracle端不特殊地设定安全设置和检查。
项目的用户身份验证、用户授权管理都由应用程序代码实现。
7.2数据库验证方式
应用程序端连接数据库时使用的数据库验证方式为Oracle验证。
数据库连接串将加密存储在系统配置文件中。
8数据库管理和设置
8.1概述
本节内容与数据库功能无关,将从教学案例系统的数据库运行角度出发,对本数据库的属性设置和备份恢复策略提出指导性说明。
8.2数据库属性设置
8.3数据库备份恢复策略
数据库的大小和数据修改的频率决定了采用何种数据库备份恢复策略。
如果数据库较小或修改的频度非常低,则可以只实施完全数据库备份,不过此时要定期清理数据库的事务日志,防止数据库的事务日志被填满。
其他情况则需要使用差异备份。
由于本案例教学涉及的数据库规模较小,建议每周做一次完全备份,中间间隔两天做一次差异备份。
8.4数据库运行日常维护
Oracle的一个优势就是对日常维护的要求比较低,但为了追求更高的可用性和安全性,建议每周做备份,同时注意将备份放在不同的备份媒体中,如多个硬盘。
/*==============================================================*/
/*DBMSname:
ORACLEVersion10g*/
/*Createdon:
2013/11/1314:
21:
36*/
/*==============================================================*/
altertablet_wq_attendance
dropconstraintFK_T_WQ_ATT_REFERENCE_T_WQ_EMP;
altertablet_wq_department
dropconstraintFK_T_WQ_DEP_PK_PID213_T_WQ_DEP;
altertablet_wq_emploee
dropconstraintFK_T_WQ_EMP_PK_DEPID3_T_WQ_DEP;
altertablet_wq_emploee
dropconstraintFK_T_WQ_EMP_PK_PID213_T_WQ_EMP;
altertablet_wq_emploee
dropconstraintFK_T_WQ_EMP_REFERENCE_T_WQ_EMP;
altertablet_wq_leave
dropconstraintFK_T_WQ_LEA_REFERENCE_T_WQ_DEP;
altertablet_wq_leave
dropconstraintFK_t_wq_leave_1;
altertablet_wq_leave
dropconstraintFK_t_wq_leave_2;
altertablet_wq_overTimeWork
dropconstraintFK_T_OVERTI_4;
altertablet_wq_overTimeWork
dropconstraintFK_T_OVERTI_3;
altertablet_wq_result
dropconstraintFK_T_WQ_RES_REFERENCE_T_WQ_EMP;
altertablet_wq_salary
dropconstraintFK_T_WQ_SAL_REFERENCE_T_WQ_EMP;
droptablet_wq_attendancecascadeconstraints;
droptablet_wq_departmentcascadeconstraints;
droptablet_wq_emploeecascadeconstraints;
droptablet_wq_empoleeTypecascadeconstraints;
droptablet_wq_leavecascadeconstraints;
droptablet_wq_overTimeWorkcascadeconstraints;
droptablet_wq_resultcascadeconstraints;
droptablet_wq_salarycascadeconstraints;
/*==============================================================*/
/*Table:
t_wq_attendance*/
/*==============================================================*/
createtablet_wq_attendance(
idnumber(10)notnull,
empidnumber(10),
workTimedate,
afterWorkTimedate,
typevarchar2(20),
atimedate,
constraintPK_T_WQ_ATTENDANCEprimarykey(id)
);
/*==============================================================*/
/*Table:
t_wq_department*/
/*==============================================================*/
createtablet_wq_department(
depidnumber(10)notnull,
p_didnumber(10),
namevarchar2(50),
"desc"varchar2(255),
constraintPK_T_WQ_DEPARTMENTprimarykey(depid)
);
commentontablet_wq_departmentis
'部门表';
/*==============================================================*/
/*Table:
t_wq_emploee*/
/*==============================================================*/
createtablet_wq_emploee(
empidnumber(10)notnull,
p_empidnumber(10),
depidnumber(10),
typeidnumber(5),
namevarchar2(50),
mailvarchar2(50),
sexnumber
(1),
birthdaydate,
usernamevarchar2(50),
passwordvarchar2(50),
photoblob,
useLeaveTimenumber(3),
yearLeaveTimenumber(3),
phonevarchar2(20),
comeTimedate,
selfComentclob,
constraintPK_T_WQ_EMPLOEEprimarykey(empid)
);
commentontablet_wq_emploeeis
'员工信息';
/*==============================================================*/
/*Table:
t_wq_empoleeType*/
/*==============================================================*/
createtablet_wq_empoleeType(
typeidnumber(5)notnull,
typenumber(5),
typenamevarchar2(20),
constraintPK_T_WQ_EMPOLEETYPEprimarykey(typeid)
);
/*==============================================================*/
/