一.系统背景介绍及需求描述
1.所选课题的现状、背景、意义现状:
国内:自改革开放以来,我国生产力发展迅速,工业发展态势迅猛,工厂规模随之不断扩大,工厂里工作的员工以及工厂要处理的产品数量越来越多,人工管理的成本越来越高并且变的不现实。当前中国很多工厂过度依赖人工管理,信息化程度低,不能及时获得工厂的实时数据,无法迅速准确的整合信息实现业务内容的确定以及满足用户复杂和不断变化的业务需求。
国外:发达国家工厂大部分信息化程度较高,能够方便地获取工厂各方面的实时数据,业务内容明确,可以将要传送的整个工厂运营信息的生产数据与本地和世界的整个业务相整合。可以为用户的业务提供大量工厂信息,管理业务和过程控制域,消除业务系统和过程控制之间的差距。
背景:
国内工厂制造的信息化正在日益提高,但是在企业生产现场监控管理方面还基本上基于手工在操作。这就出现了所谓的“制造业生产现场黑箱作业”现象。产品汰旧换新加速迫使产品设计,工程及生产部门之间的关系越来越紧密。
生产周期缩短,生产单位不断面临新的零组件,新的设备,新的制造流程及经常性的工程变更,生产现场需要一套实时生产指示系统,有效地指引生产人员作业规范,同时能正确迅速地将生产状况反应给设计制造部门,及时找出新产品生产问题。
经济的发展日渐国际化,所面临的不仅是国内竞争而是面对全球各地一流产品的竞争压力。就生产而言,所面临的是要不断提升产质量量及降低生产成本。
意义:
工厂管理信息系统为工厂创建有价值的数据基础,从而降低所需工程成本。通过工厂管理信息系统,各环节的工作变得更规范、更有序。员工把时间都专注到如何更好的执行计划、提高效率上,高层从繁琐、低效的常规事务中解放出来,更多时间花在制定战略上,而不是忙于应对各种突发情况做出应急反应。这样一来,不仅大大提升员工的积极性、满意度和生产力,更能全方位降耗增效,高效率、高品质、高利润自然相伴而来。
2.项目所要实现的主要功能介绍工厂需要一个工厂管理信息系统。该系统的用户为工厂管理员,同时他也是系统管理员。系统的主要功能如下:
①职工信息管理:主要是管理员对工厂内的职工的信息进行登记,包括职工号,职工姓名,职工类型等,以便统一管理,当现有职工的信息发生变动时或者职工入职或离职时,对职工信息进行相应的修改或添加删除。还可以查询现有职工的所有信息。
②供应商信息管理:主要是管理员对向工厂提供物资的供应商的信息进行记录,包括供应商号,产园名,地址和电话号码。可以对其进行相应的查询或修改以及添加删除操作。
③产品信息管理:主要是管理员对工厂的产品的相关信息进行记录。包括产品名,产品号,以及产品数量。可以对其进行相应的查询或修改以及添加删除操作。
④仓库信息管理:主要是对工厂所有的仓库的信息进行记录。包括仓库号和地址。可以对其进行相应的查询或修改以及添加删除操作。
⑤订单信息管理:主要是管理员对工厂所接订单的信息进行记录。包括订单号,订单金额等。可以对其进行相应的查询或修改以及添加删除操作。
⑦顾客信息管理:主要是管理员对下订单的顾客的信息进行记录。包括顾客号,姓名以及联系方式。可以对其进行相应的查询或修改以及添加删除操作。
功能模块图
二.数据库设计
1.概念结构设计
系统基本ER图:
实体属性图:
分ER图:
①
②
③
④
⑤
2.逻辑结构设计实体对应的关系模式:
职工(姓名,职工号,年龄,职工类型,性别)
部门(部门号,部门名称,部门主管,部门联系方式)
仓库(仓库号,地址)
供应商(供应商号,产园名,地址,电话号码)
产品(名称,产品号,产品数量)
订单(订单号,订单金额,相关产品)
顾客(顾客号,姓名,联系方式)
联系对应的关系模式:
工作(职工号,部门号)
供应(供应商号,产品号)
订货(订单号,顾客号,订单数量)
加工制作(职工号,产品号)
存取(产品号,仓库号,存取数量)
三.数据库中表对象的创建 1.用户的创建及权限授予
create user 小明 identified by xiaoming;
grant all priviliges to 小明;
conn 小明/xiaoming;
2.部门表的创建1)部门表创建语句
create table department02(
deno varchar2(10) primary key not null,
dename varchar2(15) not null,
deleader varchar2(15) not null,
decontact char(11) not null
);
2)数据的插入
insert into department02 values('de0001','生产部','王伟',15111111111);
insert into department02 values('de0002','行政部','刘佳乐',15222222222);
insert into department02 values('de0003','人事部','小明',15333333333);
insert into department02 values('de0004','保障部','小红',15444444444);
insert into department02 values('de0005','采购部','小刚',15555555555);
insert into department02 values('de0006','销售部','小刘',15666666666);
insert into department02 values('de0007','财务部','小黄',15777777777);
3)部门表数据查询结果
3.职工表的创建1)表创建语句
create table employee02(
eno varchar2(10) primary key not null,
ename varchar2(10) not null,
esex varchar2(5) check(esex in ('男','女')) not null,
eage number(2) check(eage>=18 and eage<=65),
etype varchar2(20) not null
);
2)数据的插入
insert into employee02 values('e0001','张三','男',25,'临时工');
insert into employee02 values('e0002','李四','男',34,'正式员工');
insert into employee02 values('e0003','王伟','男',44,'领导');
insert into employee02 values('e0004','刘佳乐','女',42,'领导');
insert into employee02 values('e0005','何宇轩','男',22,'临时工');
insert into employee02 values('e0006','谢灵彤','女',37,'正式员工');
insert into employee02 values('e0007','王秀英','女',29,'正式员工');
3)职工表数据查询结果
4.仓库表的创建1)表创建语句
create table depository02 (
dno varchar2(5) primary key not null,
dadd varchar2(50) unique not null
);
2)数据的插入
insert into depository02 values('d0001','厂内西区');
insert into depository02 values('d0002','厂内东区');
insert into depository02 values('d0003','厂内北区');
insert into depository02 values('d0004','厂内南区');
insert into depository02 values('d0005','厂外中心街道区');
insert into depository02 values('d0006','厂外城市郊区');
3)仓库表数据查询结果
5.供应商表的创建1)表创建语句
create table supplier02 (
sno varchar2(10) primary key not null,
sname varchar2(15) unique not null,
sadd varchar2(15) not null,
scontact char(11) not null
);
2)数据的插入
insert into supplier02 values('s0001','荣供应商','荣成',12111111111);
insert into supplier02 values('s0002','威供应商','威海',12222222222);
insert into supplier02 values('s0003','黑供应商','黑龙江',12333333333);
insert into supplier02 values('s0004','北供应商','北京',12444444444);
insert into supplier02 values('s0005','上供应商','上海',12555555555);
insert into supplier02 values('s0006','深供应商','深圳',12666666666);
insert into supplier02 values('s0007','杭供应商','杭州',12777777777);
3)供应商表数据查询结果
6.产品表的创建1)表创建语句
create table product02(
pno varchar2(10) primary key not null,
pname varchar2(10) not null,
pquantity number(4) not null
);
2)数据的插入
insert into product02 values ('p0001','饮料',1000);
insert into product02 values ('p0002','饼干',2000);
insert into product02 values ('p0003','面包',3000);
insert into product02 values ('p0004','泡面',4000);
insert into product02 values ('p0005','牛肉干',5000);
insert into product02 values ('p0006','巧克力',6000);
3)产品表数据查询结果
7.订单表的创建1)表创建语句
create table orders02(
ono varchar2(10)primary key not null,
omoney number(4) not null,
oproduct varchar2(10) not null
);
2)数据的插入
insert into orders02 values ('o0001',1500,'饮料');
insert into orders02 values ('o0002',2000,'巧克力');
insert into orders02 values ('o0003',4300,'泡面');
insert into orders02 values ('o0004',6700,'面包');
insert into orders02 values ('o0005',1000,'饮料');
insert into orders02 values ('o0006',5000,'饼干');
3)订单表数据查询结果
8.顾客表的创建1)表创建语句
create table customer02(
cno varchar2(10) primary key not null,
cname varchar2(15) not null,
ccontact char(11) not null
);
2)数据的插入
insert into customer02 values('c0001','家家悦超市',13111111111);
insert into customer02 values('c0002','百货超市',13222222222);
insert into customer02 values('c0003','佳佳乐超市',13333333333);
insert into customer02 values('c0004','便民超市',13444444444);
insert into customer02 values('c0005','便利店',13555555555);
insert into customer02 values('c0006','学校',13666666666);
insert into customer02 values('c0007','小商店',13777777777);
3)顾客表数据查询结果
9.供应表的创建
1)表创建语句
create table supply02(
sno varchar2(10) not null,
pno varchar2(10) not null,
foreign key (sno) references supplier02(sno),
foreign key (pno) references product02(pno),
primary key(sno,pno)
);
2)数据的插入
insert into supply02 values('s0001','p0001');
insert into supply02 values('s0003','p0002');
insert into supply02 values('s0005','p0003');
insert into supply02 values('s0002','p0006');
insert into supply02 values('s0001','p0004');
insert into supply02 values('s0006','p0003');
insert into supply02 values('s0007','p0004');
3)供应表数据查询结果
10.订货表的创建1)表创建语句
create table ordergoods02(
ono varchar2(10) not null,
cno varchar2(10) not null,
oquantity number(4) not null,
foreign key (ono) references orders02(ono),
foreign key (cno) references customer02(cno),
primary key(ono,cno)
);
2)数据的插入
insert into ordergoods02 values('o0001','c0001',1000);
insert into ordergoods02 values('o0003','c0002',4000);
insert into ordergoods02 values('o0005','c0005',5000);
insert into ordergoods02 values('o0004','c0007',2500);
insert into ordergoods02 values('o0002','c0006',4500);
insert into ordergoods02 values('o0004','c0001',8500);
insert into ordergoods02 values('o0001','c0003',3000);
3)订货表数据查询结果
11.加工制作表的创建1)表创建语句
create table process02(
eno varchar2(10) not null,
pno varchar2(10) not null,
foreign key (eno) references employee02(eno),
foreign key (pno) references product02(pno),
primary key(eno,pno)
);
2)数据的插入
insert into process02 values('e0001','p0003');
insert into process02 values('e0004','p0002');
insert into process02 values('e0002','p0001');
insert into process02 values('e0005','p0004');
insert into process02 values('e0006','p0006');
insert into process02 values('e0003','p0005');
insert into process02 values('e0002','p0004');
3)加工制作表数据查询结果
12.存取表的创建1)表创建语句
create table storeget02(
pno varchar2(10) not null,
dno varchar2(5) not null,
sgquantity number(4) not null,
foreign key (pno) references product02(pno),
foreign key (dno) references depository02(dno),
primary key(pno,dno)
);
2)数据的插入
insert into storeget02 values('p0001','d0001',1000);
insert into storeget02 values('p0003','d0002',-1000);
insert into storeget02 values('p0002','d0003',-2000);
insert into storeget02 values('p0004','d0004',-2500);
insert into storeget02 values('p0005','d0006',5500);
insert into storeget02 values('p0006','d0005',2000);
insert into storeget02 values('p0003','d0004',1500);
3)存取表数据查询结果
13.工作表的创建1)表创建语句
create table empdepart02(
eno varchar2(10) not null,
deno varchar2(10) not null,
foreign key (eno) references employee02(eno),
foreign key (deno) references department02(deno),
primary key(eno,deno)
);
2)数据的插入
insert into empdepart02 values('e0003','de0001');
insert into empdepart02 values('e0004','de0002');
insert into empdepart02 values('e0001','de0004');
insert into empdepart02 values('e0002','de0003');
insert into empdepart02 values('e0005','de0006');
insert into empdepart02 values('e0006','de0007');
insert into empdepart02 values('e0007','de0005');
3)加工制作表数据查询结果
14.视图的创建(1)职工中是领导的视图:
create view leader02
as
select ename as 领导姓名, eno as 领导编号,esex as 领导性别,eage as 领导年龄
from employee02
where etype='领导'
with check option;
(2)职工和产品之间的关系视图:
create view emppro02
as
select process02.eno as 职工编号,e.ename as 职工姓名,process02.pno as 产品号,p.pname as 产品名称
from process02,employee02 e,product02 p
where process02.eno=e.eno and process02.pno=p.pno
with check option;
(3)产品和仓库之间的关系视图:
create view prodepo02
as
select p.pname as 产品名称,d.dadd as 产品存放仓库地址,p.pquantity+sg.sgquantity as 产品存取后剩余数量
from product02 p,depository02 d,storeget02 sg
where sg.pno=p.pno and sg.dno=d.dno
with check option;
(4)顾客和订单之间的关系视图:
create view cusord02
as
select c.cname as 顾客姓名,o.oproduct as 顾客订单购买的产品,o.omoney as 顾客订单金额,c.ccontact as 顾客联系方式
from customer02 c,orders02 o,ordergoods02 og
where og.ono=o.ono and og.cno=c.cno
with check option;
(5)供应商和产品之间的关系视图:
create view suppro02
as
select sr.sname as 供应商,sr.sadd as 供应商所在地,p.pname as 供应的产品名,p.pquantity as 供应的产品的数量,sr.scontact as 供应商联系方式
from supply02 sy,supplier02 sr,product02 p
where sy.sno=sr.sno and sy.pno=p.pno
with check option;
15.数据查询(根据需求,从不同角度分析可能要进行哪些查询?写出查询的要求和对应的SQL语句,SQL语句不少于10个,要分别体现单表查询、多表连接查询、分组查询、嵌套查询等)根据工厂管理信息系统的需求,可能要进行职工信息的查询,供应关系的查询,订货信息的查询,加工制作信息的查询,存取信息的查询。
(1)查询职工中的领导信息
select e.eno as 领导编号,ename as 领导姓名,esex as 领导性别,eage as 领导年龄
from employee02 e
where e.etype='领导';
(2)查询职工中的领导所在的部门
select d.deno as 部门号,d.dename as 部门名称,e.ename as 领导
from empdepart02 ed,employee02 e,department02 d
where ed.eno=e.eno and ed.deno=d.deno and e.etype='领导';
(3)查询供应产品数量最多的供应商以及相应的产品select s.sname as 供应商,p.pname as 产品名
from product02 p,supplier02 s,supply02 sp
where sp.pno=p.pno and sp.sno=s.sno and p.pquantity in (
select max(p.pquantity)
from product02 p
);
(4)查询不是超市的顾客
select c.cno as 顾客号,c.cname as 顾客名
from ordergoods02 og,customer02 c,orders02 o
where og.cno=c.cno and og.ono=o.ono and c.cname not like'%超市';
(5)查询有多个订单的顾客
select cname as 顾客,count(o.ono) as 订单数量
from ordergoods02 og,customer02 c,orders02 o
where og.cno=c.cno and og.ono=o.ono
group by c.cname
having count(o.ono)>=2;
(6)查询订单量最大的顾客以及相应的订单量和订单金额
select c.cname as 顾客名,og.oquantity as 订单量,o.omoney as 订单金额
from ordergoods02 og,customer02 c,orders02 o
where og.cno=c.cno and og.ono=o.ono and og.oquantity=(
select max(og.oquantity)
from ordergoods02 og
);
(7)查询临时工负责加工的产品
select p.pno as 产品号,p.pname as 产品名,e.ename as 临时工姓名
from employee02 e,product02 p,process02 ps
where ps.eno=e.eno and ps.pno=p.pno and e.etype='临时工';
(8)查询需要多个员工加工的产品
select p.pname as 产品名,count(e.ename) as 参与的员工数量
from employee02 e,product02 p,process02 ps
where ps.eno=e.eno and ps.pno=p.pno
group by p.pname
having count(e.ename)>=2;
(9)查询加工多个产品的员工
select e.ename as 员工姓名,count(p.pno) as 加工的产品数量
from employee02 e,product02 p,process02 ps
where ps.eno=e.eno and ps.pno=p.pno
group by e.ename
having count(p.pno)>=2;
(10)查询存在厂内仓库的产品
select p.pno as 产品号,p.pname as 产品名,d.dadd as 仓库地址
from product02 p,depository02 d,storeget02 sg
where sg.pno=p.pno and sg.dno=d.dno and d.dadd like'厂内%';
(11)查询仓库内经过存取后的产品数量
select p.pno as 产品号,p.pname as 产品名,sg.sgquantity+p.pquantity as 存取后的产品数量
from product02 p,depository02 d,storeget02 sg
where sg.pno=p.pno and sg.dno=d.dno;
(12)查询经存取后产品数量最多的产品信息
select p.pno as 产品号,p.pname as 产品名,d.dadd as 产品所在仓库
from product02 p,depository02 d,storeget02 sg
where sg.pno=p.pno and sg.dno=d.dno and (sg.sgquantity+p.pquantity) = (
select max(sg.sgquantity+p.pquantity)
from product02 p,depository02 d,storeget02 sg
where sg.pno=p.pno and sg.dno=d.dno
);
四.总结
通过本次的课程设计,我更加熟练地掌握了对数据库管理系统的使用方法。从一开始确立系统功能,制作功能模块图,确立实体属性联系之间的关系,构建系统基本ER图,实体属性图,分ER图,将ER图转换为相应的关系模式,然后根据关系模式创建相应的表,视图。到后面根据系统应有的功能对经常使用的功能进行SQL语句的查询,单表查询,多表查询,分组查询,嵌套查询都有体现。在这一过程中,我增强了构建E-R图的能力,对ER图的实体属性联系有了进一步体会,更加熟练的掌握了oracle数据库增删改查语句的使用,SQL语句的运用更为得心应手。对数据库有了更深层次的理解。在数据库的设计过程中,我进一步巩固了学过的知识,让我得以将书本上的理论与实践相结合,领会到了许多平时课堂上所没有心得与经验。
同时在进行数据库设计时也发现了不少问题,对于如何将现实问题转化为问题模型这方面的能力明显不足,在对数据库信息分析层次上还有欠缺,在建立E-R图的时候出现了很多的问题,有时无法将几个事物之间的关系准确的用实体关系模型呈现。因为一开始比较不熟练,所以浪费了较多的时间在ER图构建上。同时,创建的表的数据插入数量不是太多,因此数据的代表性并没有实现的很好。从而后面的SQL语句查询结果有些单一。经过这次数据库实践,我会认真吸收经验和教训,不断改进这次数据库设计体现出来的缺点和短板,争取在下一次实践中有更好的发挥。