数据库设计期末作业
学号: 姓名: 班级:
一 . 设计任务、要求及所用软件环境或工具、
设计任务:选题一, 工资管理系统设计
要求:它的主要任务是对各种工资信息 进行日常的管理,如工资信
删除,迅速准确地完成各种工资信息 的统计计算和汇总,快速打印出报表。
软件环境:SQLserver2019
工具:SQLmanage stduio
二.数据库设计
1)需求分析阶段的数据流图、数据字典

数据字典:
1数据流名称:工资信息[使用文档中的独特引言吸引读者的注意力,或者使用此空间强调要点。要在此页面上的任何位置放置此文本框,只需拖动它即可。]
来源:财务人员
去向:工资
2数据流名称:员工信息
来源:人事管理
去向:员工
3数据流名称:部门信息
来源:人事管理
去向:部门
4数据流名称:查询请求
来源:员工
去向:查询职工工资
5数据流名称:查询结果
来源:查询职工工资
去向:品工
2)数据库概念设计的 ER图(局部ER图 及 全局ER 图)

3)数据库逻辑阶段设计的 各个数据模式
E-R图转换成关系模式如下:
员工(员工编号,姓名,性别,出生年月,部门编号)
F = {员工编号→姓名,员工编号→性别,员工编号→出生日期,员工编号→部门编号}
候选码:员工编号,姓名,最高符合BCFN。
工资(员工编号,基本工资、岗位工资、住房补贴、津贴、工会会费、水电费、住房公积金,养老保险、奖惩、应发金额、应扣金额,实发金额)
F = {员工编号,员工编号→基本工资、员工编号→岗位工资、员工编号→住房补贴、员工编号→津贴、员工编号→工会会费、员工编号→水电费、员工编号→住房公积金,员工编号→养老保险、员工编号→奖惩、员工编号→应发金额、员工编号→应扣金额,员工编号→实发金额}
候选码:员工编号,最高符合BCNF。
部门信息(部门编号、部门名称、部门负责人、部门人数。)
F = {部门编号、部门编号→部门名称、部门编号→部门负责人、部门编号→部门人数。 }
候选码:部门编号,部门名称,最高符合BCNF。
创建数据库:
- create table department
- (
- dno char(10) primary key not null,
- dname char(6) not null,
- dcharge char(7) not null,
- dnumeber int
- );
-
- create table woker
- (
- wno char(15) primary key not null,
- wname varchar(15) not null,
- sex char(5) not null check(sex='男' or sex='女'),
- birth date not null,
- dno char(10) not null,
- post char(6),
- mar char(6),
- politic char(6) check(politic in ('党员','团员','群众'))
- foreign key (dno) references department(dno)
- );
-
- create table wage(
- wno char(15) primary key not null,
- base_wage float,
- post_wage float,
- house_wage float,
- allowances float,
- union_dues float,
- utilities float,
- house_pro float,
- old_ins float,
- reward float,
- pay_amount float,
- deduc_amount float,
- paid_amount float,
- foreign key(wno) references woker(wno)
- )

表的内容的编辑根据自己的需要进行编辑
4)数据库的安全性设计(设置不同权限的用户方案)
创建不同的登录对象:财务人员,人事管理人员,员工。



5)基础数据的维护
基于查询功能,由各个表的管理员进行维护。
查询:
- select *
- from woker
- where wname = '张三'

- select *
- from wage
- where wno= '11111'

创建视图:浏览工资表,返回当月份各个部门员工的工资信息。
- create view de_wage
- as select dno 部门编号 ,wage.*
- from wage ,woker
- where wage.wno =woker.wno
- group by dno

6)各类信息的查询统计(至少包括一个存储过程、一个触发器)
创建存储过程(以员工编号为输入参数返回指定员工的基本信息)
- create procedure chazhao
- as
- declare @wno char(15)
- begin
- select *
- from wage
- where wno =@wno
- end

创建 一个存储 过程统计所有员工在本月的实发工资为输出。
- create procedure 总工资
- as
- declare @total_wage float
- begin
- select @total_wage= sum(paid_amount)
- from wage
- end

创建触发器(当在员工表中有部门变动时,部门表中部门人数自动变化)
- create trigger 职位调动
- on woker
- after update ,insert,delete
- as
- declare @dno char(10) ,@dnumber int
- begin
- select @dno =dno
- from inserted --变动的部门(@dno)
-
- select @dnumber = count(*)
- from woker
- group by dno
- having dno =@dno
- ---变动之后的部门人数
-
- update department
- set dnumeber = @dnumber
- where dno =@dno
- ---更新部门人数
-
- end
