前言
数据库课程是需要做些相关知识点的数据库实验报告的,三桥君根据自己所学所做的数据库实验,特地重新整理成教程。这些教程一共有6份,收录到《数据库实验》系列了。
一、 实验目的
1、培养学生运用所学课程《数据库系统原理》的理论知识和技能,深入理解《数据库系统原理》课程相关的理论知识,学会分析实际问题的能力。2、培养学生掌握用《数据库系统原理》的知识设计计算机应用课题的思想和方法。3、培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。4、通过本次实验,完成相关内容,包括: 1)通过调查研究和运用网络收集和调查有关资料、最新技术信息; 2)基本掌握撰写小论文的基本步骤和写作方法;
3)根据课题的要求基本理解和掌握ER图的设计方法和关系模式的转换; 4)根据课题的要求基本理解和掌握数据流图(DFD)和数据字典(DD)的设计方法; 5)创建数据库及各种数据库对象。
二、 实验内容
1、任选一个题目,调查分析一个具体的或模拟的实例;2、描述该实例的业务信息和管理工作的要求;3、建立数据字典; 4、列出实体、联系; 5、指出实体和联系的属性; 6、画出ER图; 7、将ER图转换成关系模式,并注明主码和外码;8、创建数据库;9、根据题目,写查询、存储过程、触发器等。(其中存储过程、触发器选做)
三、实验结果
1.题目
1.1名称
蜜柚ERP系统
1.2功能
(1)实现商品类别、供货商、业务员信息管理;
(2)实现商品信息、仓库信息管理、仓库商品管理;
(3)实现商品验收入库、商品销售出库管理,入库和出库时自动修改对应商品的总库存和分库库存量(用触发器实现),另外验收或销售时一单可以验收或销售多种商品;
(4)实现转仓管理,转仓时自动修改转出仓库和转入仓库对应商品的数量(用触发器实现);
(5)创建存储过程统计指定时间段内各种商品的进货数量和销售数量;
(6)创建表间关系。
2.需求分析
2.1个人需求
我在大学期间比较折腾,做过很多兼职,如当酒店服务员,当保安,去工厂打工,卖蜜柚,做专升本代理,摆摊卖对联,当数学家教等等事情,赚了不少钱。
其中,我从在福建商学院读大二时,就开始卖家乡的平和蜜柚。
大三实习忙于工作,也蛮卖一些;到了泉州师范学院第一学期,跟朋友合作创办了个微信公众号来卖蜜柚。
有时生意好的时候要记账,发现数据好乱、很杂,用excel记录发现很费时间又不好统计结果;要是用专门的ERP软件麻烦,还需要自学很多操作,有些还要收费。面对这种情况,如果想要做个细账实在不方便,只能作罢。
2.2系统描述
该系统主要是对进货、销售、库存管理等做出管理,基本实现了商店商品类别、供货商、业务员信息的管理;并用触发器和规则实现了系统的完整性和一致性的管理,在商品入库、出库和转库的过程中,能自动修改相应的数量。基本满足设计题目的要求。
3.E-R图
3.1实体与联系
实体:商品类别、供货商、业务员、商品、仓库
联系:所属、供应、管理、库存、入库、出库、转库
3.2属性
商品类别(商品类别号,商品类别名)
供货商(供货商号,供货商名,供货商地址,联系电话)
商品(商品号,商品类别号,供货商号,商品名,商品规格,商品斤数,商品单位,商品价格,商品数量)
仓库(仓库号,仓库名,仓库地址)
业务员(业务员号,业务员名,性别)
库存(商品号,商品名,仓库号,库存数量)
入库(商品号,商品名,仓库号,仓库名,入库数量,入库时间,业务员号)
出库(商品号,商品名,仓库号,仓库名,出库数量,出库时间,业务员号)
转库(商品号,商品名,原仓库号,目标仓库号,转库数量,转库时间,业务员号)
3.3E-R图
(1) 局部 ER图

(2) 全局 ER图


3.4关系模式
3.4.1概念
(1)1:1
当转换为关系模型时,在两个实体任选一个添加另一个实体的主键即可。
(2)1:N
当转换为关系模型时,在N端添加另一端的主键。
(3)M:N
当转换为关系模型时,需要将联系转换为实体,然后在该实体上加上另外两个实体的主键,作为联系实体的主键,然后再加上该联系自身带的属性即可。
概念参考这篇:(浅析如何把ER模型转换为关系模式)
https://blog.csdn.net/weixin_46218781/article/details/106065219
3.4.2模式分析
根据以上规则,本系统的 E-R模型向关系模型转换如下 (主码用下横线标出):
具体图示如下:
商品类别(商品类别号,商品类别名)
供货商(供货商号,供货商名,供货商地址,联系电话)
商品(商品号,商品类别号,供货商号,商品名,商品规格,商品斤数,商品单位,商品价格,商品数量)
仓库(仓库号,仓库名,仓库地址)
业务员(业务员号,业务员名,性别)
库存(商品号,商品名,仓库号,库存数量)
入库(商品号,仓库号,业务员号,商品名,仓库名,入库数量,入库时间)
出库(商品号,仓库号,业务员号,商品名,仓库名,出库数量,出库时间)
转库(商品号,原仓库号,目标仓库号,业务员号,商品名,转库数量,转库时间,)
4.数据字典









5.程序实现
(1)创建数据库“蜜柚ERP系统”,创建各个数据表。

创建表的数据库源码可以到公众号【三桥君】回复【数据库实验六】领取。
数据库导入方式:新建一个数据库,然后打开"蜜柚ERP系统-创建表"的源代码,直接全选执行即可。
(2) 商品类别表插入数据
/* 商品类别表插入数据 */
insertinto商品类别表 values ('101','白心蜜柚')
insertinto商品类别表 values ('102','红心蜜柚')
insertinto商品类别表 values ('103','三红蜜柚')
select*from商品类别表

(3)供货商表插入数据
/* 供货商表插入数据 */
insert into 供货商表 values ('GHS101','琯溪蜜柚厂','平和县','18888888888')
insert into 供货商表 values ('GHS102','霞寨蜜柚厂','平和县','18888888888')
select * from 供货商表

(4)业务员表插入数据
/* 业务员表插入数据 */
insert into 业务员表 values ('YWY101','三桥君','男')
insert into 业务员表 values ('YWY102','三桥君牛逼','男')
insert into 业务员表 values ('YWY103','三桥君真帅','男')
select * from 业务员表

(5)仓库表插入数据
/* 仓库表插入数据 */
insertinto仓库表 values ('CKH101',' 仓库一号 ')
insertinto仓库表 values ('CKH102',' 仓库二号 ')
select*from仓库表

(6)商品表插入数据
/* 商品表插入数据 */
insert into 商品表 values ('SP101','101','GHS102','白心蜜柚1','2个礼盒装','4.9-5.6',' 箱',28.00,100)
insert into 商品表 values ('SP102','101','GHS101','白心蜜柚2','4个礼盒装','9.0-9.5',' 箱',48.00,100)
insert into 商品表 values ('SP103','102','GHS102','红心蜜柚1','2个礼盒装','4.9-5.6',' 箱',35.00,100)
insert into 商品表 values ('SP104','102','GHS102','红心蜜柚2','4个礼盒装','9.0-9.5',' 箱',63.00,100)
insert into 商品表 values ('SP105','103','GHS101','三红蜜柚1','2个礼盒装','4.9-5.6',' 箱',38.00,100)
insert into 商品表 values ('SP106','103','GHS101','三红蜜柚2','4个礼盒装','9.0-9.5',' 箱',65.00,100)
SELECT * FROM 商品表

(7)库存表插入数据
/* 库存表插入数据 */
insert into 库存表 values ('SP101','白心蜜柚1','CKH101',70)
insert into 库存表 values ('SP101','白心蜜柚1','CKH102',30)
insert into 库存表 values ('SP102','白心蜜柚2','CKH101',50)
insert into 库存表 values ('SP102','白心蜜柚2','CKH102',50)
insert into 库存表 values ('SP103','红心蜜柚1','CKH101',50)
insert into 库存表 values ('SP104','红心蜜柚2','CKH101',50)
insert into 库存表 values ('SP105','三红蜜柚1','CKH102',50)
insert into 库存表 values ('SP106','三红蜜柚2','CKH102',50)
SELECT * FROM 库存表

(8)创建商品入库触发器。
/* 创建商品入库触发器 */
createtrigger入库触发器 on入库表 forinsert
as
declare@数量 int
select@数量=入库数量 from入库表
update库存表 set库存数量 =库存数量 +@数量
where库存表.商品号=(select商品号 frominserted)and库存表.仓库号
=(select仓库号 frominserted)
update商品表 set商品数量 =商品数量 +@数量
where商品表.商品号=(select商品号 frominserted)

(9)入库表插入数据,并验证入库触发器的功能。
/* 入库表插入数据 */
insert into 入库表 values ('SP101','白心蜜柚1','CKH101','仓库一号',80,'2019-09-26','YWY101')
insert into 入库表 values ('SP102','白心蜜柚2','CKH102','仓库二号',30,'2019-09-26','YWY102')
insert into 入库表 values ('SP103','红心蜜柚1','CKH101','仓库一号',0,'2019-09-26','YWY103')
insert into 入库表 values ('SP104','红心蜜柚2','CKH101','仓库一号',30,'2019-09-26','YWY104')
insert into 入库表 values ('SP105','三红蜜柚1','CKH102','仓库二号',80,'2019-09-26','YWY105')
insert into 入库表 values ('SP106','三红蜜柚2','CKH102','仓库二号',30,'2019-09-26','YWY106')
SELECT * FROM 入库表

(10)创建商品出库触发器。
/* 创建商品出库触发器 */
create trigger 出库触发器 on 出库表 for insert
as
declare @数量 int
select @数量=出库数量 from 出库表
update 库存表 set 库存数量 =库存数量 -@数量
where 库存表.商品号=(select 商品号 from inserted) and 库存表.仓库号
=(select 仓库号 from inserted)
update 商品表 set 商品数量 =商品数量 -@数量
where 商品表.商品号=(select 商品号 from inserted)

(11)出库表插入数据,验证出库触发器的功能。
/* 出库表插入数据 */
insert into 出库表 values ('SP101','白心蜜柚','CKH101','仓库一号',20,'2019-10-26','YWY101')
insert into 出库表 values ('SP102','白心蜜柚','CKH102','仓库二号',25,'2019-10-29','YWY102')
insert into 出库表 values ('SP103','红心蜜柚','CKH101','仓库一号',30,'2019-10-22','YWY103')
insert into 出库表 values ('SP104','红心蜜柚','CKH101','仓库一号',20,'2019-11-29','YWY101')
insert into 出库表 values ('SP105','三红蜜柚','CKH102','仓库二号',80,'2019-10-10','YWY101')
insert into 出库表 values ('SP106','三红蜜柚','CKH102','仓库二号',25,'2019-11-15','YWY102')
SELECT * FROM 出库表

(12)创建商品转库触发器。
/* 创建商品转库触发器 */
create trigger 转库触发器 on 转库表 for insert
as
declare @转库数量 int
select @转库数量 =转库数量 from 转库表
update 库存表 set 库存数量 =库存数量 -@转库数量
where 库存表.仓库号=(select 仓库号 from inserted) and 库存表.商品号=(select 商品号 from inserted)
update 库存表 set 库存数量 =库存数量 +@转库数量
where 库存表.仓库号=(select 目标仓库号 from inserted) and 库存表.
商品号=(select 商品号 from inserted)

(13)转库表插入数据,并验证转库触发器的功能。
/* 转库表插入数据 */
insert into 转库表 values ('SP101','白心蜜柚1','CKH101','CKH102',12,'2019-10-20','YWY101')
insert into 转库表 values ('SP102','白心蜜柚2','CKH102','CKH101',11,'2019-10-19','YWY102')
insert into 转库表 values ('SP103','红心蜜柚1','CKH101','CKH102',5,'2019-10-22','YWY103')
insert into 转库表 values ('SP104','红心蜜柚2','CKH101','CKH102',1,'2019-11-13','YWY101')
insert into 转库表 values ('SP105','三红蜜柚1','CKH102','CKH101',40,'2019-10-1','YWY102')
insert into 转库表 values ('SP106','三红蜜柚2','CKH102','CKH101',15,'2019-11-10','YWY103')
SELECT * FROM 转库表

(14)创建存储过程,统计指定时间段内各种商品的进货数量和销售数量。
/* 创建存储过程统计指定时间段内各种商品的进货数量和销售数量 */
create proc 存储过程01
as
select 入库表.商品号,入库表.商品名,入库数量 AS 进货数量 ,入库时间 AS 进货时间,出库数量 AS 销售数量,出库时间 AS 销售时间
from 入库表,出库表
where 入库时间 between '2019-9-1' and '2019-11-1'
and 出库时间 between '2019-10-1' and '2019-11-1'
order by 入库表.商品号

数据的数据库源码可以到公众号【三桥君】回复【数据库实验六】领取。
数据库导入方式:在前面创建好的数据库基础上,然后打开“蜜柚ERP系统-数据”的源代码,按题目选择执行即可。
完整的数据库源码执行“蜜柚ERP系统”。