1、数据库课程设计说明书模板中北大学数据库课程设计说 明 书学 院、系:软件学院专 业:软件工程学 生 姓 名:于淇学 号:1221011415设 计 题 目:通用工资管理系统 起 迄 日 期:2014年5月26日- 2014年6月20日指 导 教 师:李瑞红2012 年 6月 21 日1需求分析工资管理系统的功能是收集员工的个人信息,以便实现按照科室录入个人的基本资料,向各科室发放个人工资和计算个人的实际发放工资,可以让相关财务部门及领导查看各科室人数情况和工资金额,还可以让员工用自己的员工号去查看自己的工资和扣除金额的情况。工资管理系统的主要功能有:(1)、录入个人的基本资料;(2)、计算个人
2、的实际发放工资,即根据考勤、津贴、工资计算 实际工资;(3)、按部门、职业分类、和时间统计人数和工资金额;(4)、实现员工个人信息、工资、部门或周期工资情况查询;(5)、能够删除辞职人员的数据;工资管理:包括与工资发放相关的各种数据处理,以及对这些处理的有机组织规划;人事管理:主要指对各种员工人事信息的管理,包括员工的基本情况和升迁离职情况; 工资项目:影响工资计算的各种因素,如:基本工资,福利补贴和奖励工资,扣除的工资等等。用户登录管理:2种权限,一种是管理员权限,可以做任何操作;一种是普通用户权限只可以查看自己的工资及基本信息,不能编辑,也不能查看其他用户信息。1.1处理对象: 员工信息:
3、员工编号,员工姓名,性别,年龄,出生年月,籍贯,电话号码,部门编 号 部门信息:部门编号,部门名称,部门负责人,联系电话 员工出勤信息:工资编号,员工编号,月份,基本工资,福利补贴,奖励工资,事业保险金,住房公积金 实发工资信息:工资编号,员工编号,月份,所得工资1.2数据流图: 员工信息 工资信息 部门信息 改 改删 员工出勤表 删添 添员工信息表 部门表 实发工资信息表1.3数据字典 数据项列表数据项编号 数据项名 数据项含义 存储结构DI-1 w_number 员工编号 smallintDI_2 w_nam 员工姓名 char(10)DI_3 sex 性别 char(6)DI_4 age
4、 年龄 smallintDI_5 birthday 出生年月 char(10)DI_6 native 籍贯 char(20) DI_7 w_tel 电话号码 smallintDI_8 dep_number 部门编号 smallintDI_9 month 月份 char(5)DI_ 10 dep_name 部门名称 char(5)DI_11 dep_head 部门负责人 char(5)DI_12 wa_number 工资编号 smallintDI_13 basic_wage 基本工资 smallintDI_14 boon_wage 福利补贴 smallintDI_15 enc_wage 奖励工资
5、 smallintDI_16 insurance 事业保险金 smallintDI_17 OPSO 住房公积金 smallintDI_18 fac_wage 所的工资 smallint2 概念设计阶段实体间的联系:1:员工信息表 workers:(员工编号w_number、姓名w_name、性别sex、年龄age、出生日年月birthday、籍贯native、电话号码w_tel、所在部门编号dep_number)。2:部门表department:(部门编号dep_number、部门名称dep_name、部门负责人dep_head、部门人数dep_people)。3:员工出勤表wage:(工资编
6、号wa_number、员工编号w_number、基本工资basic_wage、福利补贴boon_wage、奖励工资enc_wage、事业保险金insurance、住房公积金ORSO、月份month)。4:实发工资表factwage:(工资编号wa_number、员工编号w_number、所得工资fac_wage、月份month); 5:各表E-R图: 6.总E-R图:3逻辑设计阶段1.员工基本信息表 workers:(员工编号w_number、姓名w_name、性别sex、年龄age、出生日期birthday、籍贯native、电话号码w_tel、所在部门编号dep_number)。字段名字段
7、类型长度主键或外键字段值约束对应中文属性名w_numberint主键不为空员工编号w_namevarchar8不为空姓名sexvarchar2不为空性别ageint2不为空年龄birthdaydatetime不为空出生日期nativevarchar20不为空籍贯dep_numberint外键不为空所在部门编号w_telvarchar20电话号码2. 部门表department:(部门编号dep_number、部门名称dep_name、部门负责人dep_head)字段名字段类型长度主键或外键字段值约束对应中文属性名dep_numberint主键不为空部门编号dep_namevarchar20不为
8、空部门名称dep_headvarchar8不为空部门负责人3. 员工出勤表wage:(工资编号wa_number、员工编号w_number、基本工资basic_wage、福利补贴boon_wage、奖励工资enc_wage、事业保险金insurance、住房公积金ORSO、月份month)字段名字段类型长度主键或外键字段值约束对应中文属性名wa_numberint主键不为空工资编号w_numberint外键不为空员工编号basic_wagevarchar6不为空基本工资boon_wagevarchar6不为空福利补贴enc_wagevarchar6不为空奖励工资insurancevarchar
9、6不为空事业保险金ORSOvarchar6不为空住房公积金monthvarchar6主键不为空月份4. 实发工资表factwage:(工资编号fwa_number、员工编号w_number、所得工资fac_wage、月份month)字段名字段类型长度主键或外键字段值约束对应中文属性名fwa_numberint主键不为空实发工资编号w_numberint外键不为空员工编号fac_wagevarchar6不为空所得工资monthvarchar6主键不为空月份5关系模式1.员工基本信息表 workers:(员工编号w_number、姓名w_name、性别sex、年龄age、出生日期birthday、
10、籍贯native、电话号码w_tel、所在部门编号dep_number)。2.部门表department:(部门编号dep_number、部门名称dep_name、部门负责人dep_head) 3员工出勤表wage:(工资编号wa_number、员工编号w_number、基本工资basic_wage、福利补贴boon_wage、奖励工资enc_wage、事业保险金insurance、住房公积金ORSO、月份month) 4实发工资表factwage:(工资编号fwa_number、月份month、员工编号w_number、所得工资fac_wage)4 物理设计阶段物理结构设计是为逻辑数据模型建
11、立一个完整的能实现的数据库结构,包括存储结构和存取方法。1.输入:系统关系数据结构 2.输出:系统数据库物理结构 3.索引类型的选择工资管理系统的核心任务是对员工的基本信息和工资信息进行有效的管理。其中,数据量最大且访问频率较高的是工资清单表和实发工资表。为了提高系统的查询效率,降低系统的查询成本,需要为员工基本信息表和工资清单表、实发工资表建立聚簇索引。5 数据库实施数据库实施是根据应用系统数据库的关系结构模型和物理结构设计结果,形成基于SQL Server平台应用系统的数据库设计报告,并进行数据库的具体构建与管理。5.1 建立数据库、数据表、视图、索引5.1.1创建一个工资管理系统数据库(
12、命名为:wageManager ):create database wageManager;5.1.2 表对象的创建分别创建:员工基本信息表、部门表、员工出勤表、实发工资表,四个表.(1) 员工基本信息表use wageManagercreate table workers(w_number varchar(10)not null primary key, w_name varchar(8)not null, sex varchar(2)not null, birthday datetime not null, native varchar(20)not null, dep_number va
13、rchar(10)not null, w_tel varchar(20)视图如下:(2) 部门表-部门表的创建use wageManagercreate table department(dep_number int not null primary key, dep_name varchar(20)not null, dep_head varchar(8)not null, dep_tel varchar(8) not null)视图如下:(3) 员工出勤表use wageManagercreate table wage(wa_number int not null primary key,
14、 w_number int not null, basic_wage varchar(6)not null, boon_wage varchar(6)not null, enc_wage varchar(6)not null, insurance varchar(6)not null, ORSO varchar(6)not null, month varchar(6)not null, Foreign key(w_number)refrences wokers(w_number), )视图如下:(4) 实发工资表use wageManagercreate table factwage(fac_
15、number int not null primary key, w_number int not null, fac_wage varchar(6)not null, month varchar(6)not null, Foreign key(w_number)refrences wokers(w_number),)视图如下:(5)所有表创建成功,数据库表如下:Use wageManager;Insert into wokers values(00001,张明,女,20,1995/8/5,山西,182330303216,01);Insert into wokers values(00002,
16、张佳,女,20,1995/10/9,山西,182330303219,01);Insert into wokers values(00003,王明,男,23,1992/8/3,山西,182330303215,02);Insert into wokers values(00004,刘明,男,20,1995/6/23,山西,182330306216,03);Insert into wokers values(00005,王萌,女,20,1995/12/5,山西,182330303218,03);Insert into wokers values(00006,白婷,女,20,1995/6/8,山西,1
17、82360303216,02);Insert into department values(01,人事部,张佳,182330303216);Insert into department values(02,财务部,王明,182330303215);Insert into department values(03,销售部,王萌,182330303218);Insert into wage values(w00001,00001,2000,200,200,-100,-200,01);Insert into wage values(w00002,00002,2000,100,100,-100,-20
18、0,01);Insert into wage values(w00003,00003,2000,200,100,-100,-200,01);Insert into wage values(w00004,00004,2000,100,300,-100,-200,01);Insert into wage values(w00005,00005,2000,100,200,-100,-200,01);Insert into wage values(w00006,00006,2000,100,300,-100,-200,01);Insert into factwage values(wa00001,01
19、,00001,2100);Insert into factwage values(wa00002,01,00002,1900);Insert into factwage values(wa00003,01,00003,2000);Insert into factwage values(wa00004,01,00004,2100);Insert into factwage values(wa00005,01,00005,2000);Insert into factwage values(wa00006,01,00006,2100);5.1.3索引对象的创建工资管理系统的核心任务是对员工的基本信息
20、和工资信息进行有效的管理。其中,数据量最大且访问频率较高的是工资清单表和实发工资表。为了提高系统的查询效率,降低系统的查询成本,需要为员工基本信息表和工资清单表、实发工资表建立聚簇索引USE wageManagerGOCREATE UNIQUE INDEX 默认索引ON wage(wa_number)USE wageManagerGOCREATE INDEX 复合索引ON wage(wa_number,w_number,month)USE wageManagerGOCREATE INDEX 复合索引ON workers(w_number,w_name)USE wageManagerGOCREA
21、TE INDEX 唯一性索引ON workers(w_number)视图如下:5.1.4视图对象的创建USE wageManagerGOCREATE VIEW v_system_wagesAS SELECT wage.wa_number AS 工资编号, workers.w_number AS 员工编号, workers.w_name AS 员工姓名, workers.dep_number AS 部门编号, department.dep_name AS 部门名称, wage.basic_wage AS 基本工资, wage.boon_wage AS 福利工资, wage.enc_wage AS
22、 奖励工资, wage.insurance AS 事业保险金, wage.ORSO AS 住房公积金, factwage.fac_wage AS 实发工资 FROM wage,workers,department,factwage WHERE workers.w_number =wage.w_number AND workers.dep_number=department.dep_numberAND wage.w_number=factwage.w_number视图如下:界面如下:5.1.5登录用户的创建创建SQL Server登录账号:create login yuqi with passw
23、ord = 1234视图如下:5.1.6数据库用户的创建创建SQL Server数据库用户:use wageManagercreate user yuqi_userfrom login yuqi视图如下:员工基本信息表:部门表:员工出勤表:实发工资表:6系统调试和测试6.1.1插入员工信息USE wageManagerGOInsert into wokers values(00001,黄璐,女,20,1995/8/5,山西,182330306616,01);修改后表内容如下:6.1.2.数据的修改USE wageManagerGOUPDATE workersSET w_name=刘玉,dep_
24、number=02WHERE w_number=10010视图如下:修改后表内容如下:6.1.3.数据的删除USE wageManagerGODELETE FROM workers WHERE w_name=刘玉视图如下:修改后表内容如下:6.2.1 表数据的简单查询USE wageManagerGOSELECT w_number AS 员工编号,w_name AS 姓名,sex AS 性别,birthday AS 出生日期,native AS 籍贯,dep_number AS 所在部门编号,w_tel AS 联系电话FROM workers视图如下:查询单个部门工资:USE wageMana
25、gerGOSELECT w_number AS 员工编号,w_name AS 姓名,sex AS 性别,birthday AS 出生日期,native AS 籍贯,dep_number AS 所在部门编号,w_tel AS 联系电话FROM workers6.2.2表数据的联接查询1.两表联合查询员工所在部门及相关信息:USE wageManagerGOSELECT w_number AS 员工编号,w_name AS 姓名,sex AS 性别,birthday AS 出生日期,native AS 籍贯,workers.dep_number AS 部门编号,dep_name AS 部门名称,d
26、ep_head AS 部门负责人,w_tel AS 联系电话FROM workers,departmentwhere workers.dep_number=department.dep_number视图界面如下:2.三个表联合查询员工工资情况:USE wageManagerGOSELECT wage.wa_number AS 工资编号,wage.w_number AS 员工编号,w_name AS 姓名,dep_name AS 所在部门,basic_wage AS 基本工资,boon_wage AS 福利工资,enc_wage 奖励工资,insurance AS 事业保险金,ORSO AS 住
27、房公积金FROM workers,department,wage where wage.w_number=workers.w_numberAND workers.dep_number=department.dep_number视图界面如下:3.四个表整体联合查询员工工资详细情况:USE wageManagerGOSELECT wage.wa_number AS 工资编号,wage.w_number AS 员工编号,w_name AS 姓名,dep_name AS 所在部门,basic_wage AS 基本工资,boon_wage AS 福利工资,enc_wage 奖励工资,insurance
28、AS 事业保险金,ORSO AS 住房公积金,fac_wage AS 实发工资FROM workers,department,wage,factwagewhere wage.w_number=workers.w_number AND workers.dep_number=department.dep_numberAND factwage.w_number=wage.w_number查询结果如下:7心得体会这次SQL的创新考核打破了在试卷上传统的理论考试,让我们自己动手,不仅巩固了我们的所学知识,更全面的测试了我们学习这门课程的熟练程度,在这个过程中,遇见了不少问题,很多问题是平时做实验没有遇到过的,但通过自己的努