XXX大学
《数据库原理及应用课程设计》设计报告
题 目 职工工资管理系统
学生姓名
学 号
专业班级
学 院
指导教师
完成时间
本系统的主要目的是,明确查询公司职工某年某月的工资情况,通过职工工资管理系统,能明确的察看到从入职以来,每位职工的每月工资情况。同时也能查询到职工本身的一些基本信息。(这次的设计以2018年5月为例)
设计如下面所示的数据项:
职工信息包括读者职工号,姓名,性别,出生日期,年龄,部门,职位,入职时间;
工资信息包括职工号,工资年份,月份,原始工资,津贴,所得税,最终工资。
概念结构E-R图如下所示。
(1)E-R图转换成关系模式如下:
职工(职工号,姓名,性别,出生日期,年龄,部门,职位,入职时间)
F = {职工号→姓名,职工号→性别,职工号→出生日期,职工号→年龄,职工号→部门,职工号→职位,职工号→入职时间}
候选码:职工号,最高符合BCFN。
工资(职工号,工资年份,月份,原始工资,津贴,所得税,最终工资)
F = {职工号,工资年份,月份→原始工资,职工号,工资年份,月份→津贴,职工号,工资年份,月份→所得税,职工号,工资年份,月份→最终工资}
候选码:职工号,工资年份,月份,最高符合BCNF。
(2)关系模式中属性的详细说明。
职工信息表
字段名 |
数据类型 |
约束条件 |
说明 |
mno |
INT |
主键,自增 |
职工号 |
mname |
VARCHAR(50) |
唯一,不能为空 |
职工姓名 |
sex |
VARCHAR(2) |
不能为空 |
职工性别 |
birthday |
DATE |
不能为空 |
出生日期 |
age |
INT |
可以为空 |
职工年龄 |
dept |
VARCHAR(50) |
可以为空 |
所在部门 |
post |
VARCHAR(50) |
可以为空 |
职工职位 |
start_date |
DATE |
可以为空 |
入职时间 |
工资信息表
字段名 |
数据类型 |
约束条件 |
说明 |
mno |
VARCHAR(50) |
主键,自增 |
职工号 |
year |
VARCHAR(50) |
主键 |
工资年份 |
month |
VARCHAR(50) |
主键 |
月份 |
wage_jop |
float |
可以为空 |
原始工资 |
allowance |
float |
可以为空 |
津贴 |
tax |
float |
可以为空 |
所得税 |
real_wage |
float |
可以为空 |
最终工资 |
(1)建立基本表
//create database mis;
//use mis;
//职工表
create table member(
mno char(15) not null,
mname varchar(15) unique,
sex char(5) not null check(sex='男' or sex='女'),
birthday date not null,
age int not null,
dept varchar(10) not null,
post varchar(15) not null,
start_date date not null
);
//职工工资表
create table wage(
mno char(15) not null,
year varchar(10) ,
month varchar(10) ,
wage_jop float not null,
allowance float , /*津贴*/
tax float not null,/*所得税*/
real_wage float not null
);
(2)录入模拟数据
insert into member
values('0001','李勇','男',('1985-01-02'),'33','研发部','研发部长',('2012-05-11'));
Insert into member
values('0002','刘晨','男',('1987-01-02'),'31','研发部','项目策划',('2012-06-01'));
Insert into member
values('0003','王敏','女',('1985-11-02'),'33','财务部','财务会计',('2011-06-11'));
Insert into member
values('0004','张立','男',('1990-01-02'),'20','人事部','人事部长',('2011-05-11'));
工资表(以2018年5月为例)
insert into wage
values('0001','2018','5','5400','0','100','5300');
insert into wage
values('0002','2018','5','5000','500','100','4900');
insert into wage
values('0003','2018','5','4000','100','150','3850');
insert into wage
values('0004','2018','5','4000','0','150','3850');
(3)常用查询
/*查询某个人的所得工资,以查询工号为0002的员工为例*/
select member.mname,wage_jop ,allowance ,tax,real_wage
from member , wage
where wage.mno='0002' and wage.mno=member.mno;
/*查询某个部门工资不少于三千的人员信息*/
select * from member
where mno in(
select mno
from wage
where dept='研发部' and member.mno=wage.mno and real_wage>=3000);
/*修改员工信息*/
update member
set post = '财务部长'
where mname='王敏';
/*分组查询—统计每个部门的职工人数*/
select dept,count(mno) from member group by dept;
/*嵌套查询—查询津贴为零的职工号和职工姓名*/
select mno,mname from member
where mno in(select mno from wage where allowance='0');