煤气管理系统数据库.docx
- 文档编号:11121235
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:22
- 大小:993.25KB
煤气管理系统数据库.docx
《煤气管理系统数据库.docx》由会员分享,可在线阅读,更多相关《煤气管理系统数据库.docx(22页珍藏版)》请在冰豆网上搜索。
煤气管理系统数据库
信息与电气工程学院
CDIO项目报告
(2016/2017学年第一学期)
课程名称:
数据库原理及应用
项目名称:
煤气公司送气管理系统
专业班级:
计算机1503
学生姓名:
曲秋鹏
学 号:
150210324
项目成绩:
2016年12月14日
目 录
1 项目背景及需求分析ﻩ2
1.1项目背景2
1.2需求分析2
2 概念结构设计2
2.1抽象出系统实体ﻩ2
2.2局部E-R图2
2.3全局E-R图ﻩ4
3逻辑结构设计ﻩ4
3.1初始关系模式设计4
4 创建数据库及相关操作ﻩ5
4.1创建数据库5
4.2建立视图6
4.3建立存储过程8
5备份和恢复的维护、安全的设置12
6项目设计心得总结12
参考文献13
评分表14
1 项目背景及需求分析
1.1项目背景
某煤气公司为收集和管理数据简便,将工作数据导入数据库。
使其实现工作人员、客户人员的管理;实现煤气类别和供应商的管理;实现煤气入库管理和出库管理;实现费用管理。
1.2需求分析
创建触发器,实现入库、出库时相应类型煤气的数量的增加或减少。
创建存储过程统计每个送气员工指定月份送气的数量。
创建存储过程查询指定月份用气量最大的前10个用户,并按用气量递减排列。
建立数据库相关表之间的参照完整性约束;建立表间关系。
2概念结构设计
2.1抽象出系统实体
一个company可以雇佣多名worker,一名worker工作在一个company工作。
一名worker可以服务多名customer,一名customer可有由多名worker服务。
一名customer可以使用多种gas,一种gas可以供多名customers使用。
一个供应商可以提供多种gas,一种gas可以有多个供应商提供。
一个company可以拥有多种gas,一种gas属于一个公司。
2.2局部E-R图
图2.2.1局部E-R图之company
图2.2.2局部E-R图之gas
图2.2.3 局部E-R图之worker
图2.2.4局部E-R图之customer
图2.2.5局部E-R图之supply
2.3全局E-R图
图2.3.1 全局E-R图
3逻辑结构设计
3.1初始关系模式设计
Company(公司编号,公司名称)
Worker(工号,职工姓名,职工性别)
Customer(顾客编号,顾客姓名,顾客性别)
Gas(煤气编号,煤气名称,存储量)
Supply(供应商编号,供应商名称)
Goin(入库序号,入库日期,入库量,煤气编号,供应商编号)
Goout(出库序号,出库日期,出库量,煤气编号,客户编号)
Servers(服务序号,费用,服务日期,工号,客户编号)
其中有下滑直线标记的为主码,下滑波浪线标记的为外码。
3.2关系模式的规范化
Company、Worker、Customer、Gas、Supply、Goin、Goout、Servers符合第一范式,即这些关系模式的所有属性都是不可再分的基本数据项。
Company、Worker、Customer、Gas、Supply、Goin、Goout、Servers符合第二范式,即这些关系模式的每个非主属性完全函数依赖于这些关系模式中的某个候选码。
Company、Worker、Customer、Gas、Supply、Goin、Goout、Servers符合第三范式,即每个非主属性都不传递函数依赖于任何候选码。
4 创建数据库及相关操作
4.1创建数据库
Company表的建立:
代码:
CREATETABLE`company`(
`cno`tinyintNULL,
`cname`tinyint NULL ,
PRIMARYKEY(`cno`)
)
结果展示:
如图4.1.1
图4.1.1company表
customer表的建立:
代码:
CREATETABLE`customer` (
`客户编号`tinyintNULL,
`客户姓名`varchar(255)NULL,
`客户性别`enum('女','男') NULL ,
PRIMARYKEY(`客户编号`)
)
;
结果展示:
如图4.1.2
图4.1.2customer表
gas表的建立:
代码:
CREATE TABLE`gas`(
`煤气编号` tinyintNULL,
`煤气名称` varchar(255)NULL,
`存储量` floatNULL,
`所属公司`tinyintNULL,
PRIMARYKEY(`煤气编号`)
)
结果展示:
如图4.1.3
图4.1.3gas表
goin表的建立:
代码:
CREATETABLE `goin`(
`入库序号` tinyintNULL ,
`入库日期`date NULL,
`入库量`floatNULL,
`煤气编号`tinyintNULL,
`供应商编号`tinyintNULL,
PRIMARYKEY(`煤气编号`,`入库序号`, `供应商编号`),
FOREIGNKEY (`供应商编号`) REFERENCES`supply` (`供应商编号`),
FOREIGNKEY(`煤气编号`)REFERENCES`gas` (`煤气编号`)
)
;
结果展示:
如图4.1.4
图4.1.4 goin表
goout表的建立:
代码:
CREATETABLE `goout`(
`出库序号`tinyintNULL ,
`出库日期` date NULL,
`出库量`floatNULL,
`煤气编号` tinyintNULL ,
`客户编号`tinyint NULL,
PRIMARY KEY(`煤气编号`,`出库序号`,`客户编号`),
FOREIGN KEY(`供应商编号`,`客户编号`)REFERENCES`mqgs`.`customer` (`客户编号`),
FOREIGNKEY(`煤气编号`)REFERENCES`mqgs`.`gas`(`煤气编号`)
)
;
结果展示:
如图4.1.5
图4.1.5goout表
servers表的建立:
代码:
CREATETABLE `servers`(
`服务编号`tinyint NULL DEFAULT'',
`服务日期`dateNULL,
`费用`intNULL,
`工号`tinyint NULL,
`顾客编号` tinyintNULL,
FOREIGNKEY(`工号`)REFERENCES `worker` (`工号`),
FOREIGNKEY(`顾客编号`)REFERENCES`customer`(`客户编号`)
)
;
结果展示:
如图4.1.6
图4.1.6 servers表
supply表的建立:
代码:
CREATETABLE`supply`(
`煤气编号`tinyintNULL,
`煤气名称` varchar(255) NULL,
`存储量`floatNULL ,
`所属公司` tinyintNULL,
PRIMARYKEY (`煤气编号`)
)
;
结果展示:
如图4.1.7
图4.1.7supply表
worker表的建立:
代码:
CREATETABLE`worker`(
`工号`tinyint NULL ,
`职工姓名` char(255)NULL,
`职工性别` enum('女','男') NULL,
PRIMARYKEY(`工号`)
)
;
结果展示:
如图4.1.8
图4.1.8worker表
4.2建立视图
⑴客户费用视图
图4.2.1客户费用视图代码
图4.2.2客户费用视图结果
⑵入库视图
图4.2-3入库视图代码
图4.2.4入库视图结果
⑶出库视图
图4.2.5出库视图代码
图4.2.6出库视图结果
4.3建立存储过程
⑴查询月用气量最大的10个用户
存储过程代码:
BEGIN
select客户编号,出库量,出库日期fromgoout
where 客户编号in(select客户编号 fromcustomerwhere出库日期>'2016-05-01' and 出库日期<'2016-06-01')
order by出库量desclimit10 ;
END
调用语句:
callshow_cost;
调用结果(由于表内数据数量不足,故只显示部分数据):
如图4.3-1
图4.3.1月用气量最大的用户调用结果
⑵统计工人的送气量
存储过程代码:
BEGIN
select 职工姓名,客户编号,费用,服务日期from serversjoinworkeronservers.工号=worker.工号
whereservers.服务日期 in(select服务日期from servers
where服务日期>'2016-05-01'and服务日期<'2016-06-01');
END
调用语句:
callshow_work
调用结果(由于表内数据数量不足,故只显示部分数据):
如图4.3-2
图4.3.2统计工人的送气量
4.4建立触发器
⑴入库触发器
作用:
当插入一条入库数据时,gas表内对应煤气编号的存储量发生变化
代码:
Delimiter//
Createtriggergoin afterinsert
For eachrow
begin
updategasasa innerjoingoinasbona.煤气编号=new.煤气编号seta.存储量=a.存储量+new.入库量;
End//
执行结果:
如图4.4.1。
图4.4.1入库触发器
⑵出库触发器
作用:
当插入一条出库数据时,gas表内对应煤气编号的存储量发生变化。
代码:
Delimiter//
Createtrigger gooutafterinsert
For each row
begin
updategasasainner join goinasbona.煤气编号=new.入库煤气编号seta.存储量=a.存储量-new.出库量;
End//
执行结果:
如图4.4-2
图4.4.2出库触发器
4.5查询问题及查询结果
⑴查询职工得到的报酬并递减排列,代码及结果如图4.5.1。
图4.5.1 问题1结果
⑵显示煤气名称,入库时间,入库量,按照时间递减排列,代码及结果如图4.5.2.
图4.5.2 问题2结果
⑶显示煤气名称,出库时间,出库量,按照时间递减排列,代码及结果如图4.5-3
.
图4.5.3问题3结果
⑷查询职工信息,代码及结果如图4.5.4。
图4.5.4问题4结果
⑸查询顾客信息,代码及结果如图4.5-5。
图4.5.5问题5结果
5备份和恢复的维护、安全的设置
数据库的备份:
命令如图5.1,成功后将在指定目录生成一个sql文件。
图5.1备份命令
数据库的恢复:
先创建一个新数据库并use进新的数据库,输入如图5.2所示命令。
图5.2恢复命令
用户安全的设置:
root用户可进行所有操作,工人可进行增加和查询操作,顾客可进行查询操作。
Root用户操作:
如图5.3
图5.3root用户
工人用户操作:
如图5.4。
图5.4职工用户
顾客用户:
如图5.5
图5.5顾客用户
6 项目设计心得总结
从需求分析开始到彻底完成这个项目,也花费了将近一个星期的时间。
由于这门课结课较早,做这个项目的时候也忘得差不多了,造成做项目的过程中有很多不懂的地方,甚至出错造成数据库的重新构建。
经过反反复复的出错修正出错修正,才意识到刚开始的需求分析、概念结构设计和逻辑结构设计是多么的重要,很多问题都是在开始分析的不全面造成的。
例如在构建入库表时,开始只把供应商编号和煤气编号设为主键,造成同一供货商无法对同一煤气进行第二次供货。
解决的方法就是在出货表中设置一个进货单号的属性,把进货单号、供应商编号、煤气编号都设置成主键,就不会出现上述的问题了。
同理出货单表。
大到一些大企业管理,小到理发店vips刷卡,都用到了数据库,可见数据库的普遍性。
当我们编写的程序能够走上台面的时候,连接数据库也是必不可少的一步。
数据库作为如此重要的一门课,是必须学好的一门课。
ﻬ
参考文献
[1]CSDN论坛,Mysql之触发器和事务控制.
http:
//blog.csdn.net/power0405hf/article/details/46809767
[2]红黑联盟,sql之浅谈视图的作用
http:
//www.2cto.com/database/201408/326895.html
[3]CSDN论坛.Mysql数据库的维护、备份和恢复
http:
//blog.csdn.net/diyzl/article/details/45869287
ﻬ评分表
项目设计
评语
课程设计
成 绩
指导教师
(签字)
年 月 日
注:
此表必须在同一页面。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 煤气 管理 系统 数据库