仓库管理系统数据库的设计与实现 SQL server.docx
《仓库管理系统数据库的设计与实现 SQL server.docx》由会员分享,可在线阅读,更多相关《仓库管理系统数据库的设计与实现 SQL server.docx(15页珍藏版)》请在冰豆网上搜索。
仓库管理系统数据库的设计与实现SQLserver
●实验题目:
仓库管理系统数据库的设计及实现
描述:
设计一个仓库管理系统,实现下列功能:
①零件信息登记(包括种类,名称和库存数量等信息);
②零件进库登记(包括种类,名称和库存数量等信息);
③零件出库登记(包括种类,名称和库存数量等信息);
实验代码和实验结果和实验总结:
在实验代码中分别应用了相关实验操作的结果,通过上一个结果截图及其随后的结果截图和相关代码对比课已看出相关代码的作用(主要是各个触发器的作用)。
--------------------------------------
--数据库的创建
createdatabase仓库管理系统数据库
on
primary
(name=仓库管理系统数据库_data,
filename='E:
\仓库管理系统数据库_Data.MDF',
size=50,
maxsize=500,
filegrowth=5)
logon
(name=仓库管理系统数据库_log,
filename='E:
\仓库管理系统数据库_Log.LDF',
size=10,
maxsize=200,
filegrowth=5)
----------------------------------------
--数据表的创建
use仓库管理系统数据库
createtable零件信息登记
(零件代号char(10)primarykey,
名称char(10)notnull,
种类char(10)notnull,
价格numeric(10,2)notnull,
库存数量intdefault0)
createtable零件进库登记
(
零件代号char(10)foreignkeyreferences零件信息登记(零件代号),
进货代号int,
进货人工作号char(10),
名称char(10)notnull,
种类char(10)notnull,
价格numeric(10,2)notnull,
进库数量intnotnulldefault0,
存放位置char(10)notnull,
进库时间datetime,
primarykey(零件代号,进货代号))
createtable零件出库登记
(
零件代号char(10)foreignkeyreferences零件信息登记(零件代号),
出货代号int,
出货人工作号char(10)notnull,
名称char(10)notnull,
种类char(10)notnull,
价格numeric(10,2)notnull,
出库数量intnotnulldefault0,
取货单号char(10)notnull,
出库时间datetime,
primarykey(零件代号,出货代号))
----------------------------------------
--通过存储过程来实现表中数据的输入
createprocedurepro_ins1
(@nochar(20),@namechar(20),@classchar(20),@snumeric(10,2),@numint)
as
insertinto零件信息登记
values(@no,@name,@class,@s,@num)
createprocedurepro_ins2
(@nochar(20),@jnoint,@wnochar(10),@namechar(20),@classchar(20),@snumeric(10,2),@numint,@mchar(20))
as
declare@timedatetime
set@time=getdate()
insertinto零件进库登记
values(@no,@jno,@wno,@name,@class,@s,@num,@m,@time)
createprocedurepro_ins3
(@nochar(20),@jnoint,@wnochar(10),@namechar(20),@classchar(20),@snumeric(10,2),@numint,@mchar(20))
as
declare@timedatetime
set@time=getdate()
insertinto零件出库登记
values(@no,@jno,@wno,@name,@class,@s,@num,@m,@time)
createprocedurepro_select
as
begin
select*
from零件信息登记
select*
from零件进库登记
select*
from零件出库登记
end
----------------------------------------------------------
--通过第一个存储过程来实现零件的信息登录
execpro_ins1'20112001','螺栓','金属',5.2,50
execpro_ins1'20112002','龙头','金属',9.3,70
execpro_ins1'20112003','水杯','塑料',36.8,80
execpro_ins1'20112004','书包','布料',52,150
execpro_ins1'20112005','电视','电子',4000,50
-
--------------------------------------------------
--当零件进库时通过下面的触发器来实现数据的完整性
createtriggertri_统一零件管理
on零件进库登记
insteadofinsert
as
begin
if(exists(select零件代号from零件信息登记where零件代号=(select零件代号frominserted)))
begin
print'在库里已经此零件,并且放置成功'
update零件信息登记
set库存数量=库存数量+(select进库数量frominserted)
where零件代号=(select零件代号frominserted)
end
if(notexists(select零件代号from零件信息登记where零件代号=(select零件代号frominserted)))
begin
print'库里不存在此零件,已经把此零件加入零件信息登记中'
insertinto零件信息登记
select零件代号,名称,种类,价格,进库数量
frominserted
insertinto零件进库登记
select零件代号,进货代号,进货人工作号,名称,种类,价格,进库数量,存放位置,进库时间
frominserted
end
End
--------------------------------------------------------------
--对触发器“tri_统一零件管理”的相关验证信息
execpro_select
execpro_ins2'20112002',1120,'c2011a','龙头','金属',9.3,70,'一排号'
execpro_ins2'20112009',1122,'c2011b','电池','金属',8.3,150,'一排号'
execpro_ins2'20112012',1132,'c2011c','水桶','塑料',7.9,130,'二排号'
execpro_ins2'20112013',1134,'a2012d','饮料','食品',54,200,'二排号'
execpro_select
--droptriggertri_统一零件出库
---------------------------------------------------------------------
--当零件出库时通过下面的触发器来实现数据的完整性
createtriggertri_统一零件出库
on零件出库登记
insteadofinsert
as
ifexists(select零件代号from零件信息登记where零件代号=(select零件代号frominserted))
begin
print'次零件存在'
ifexists(select零件代号from零件信息登记where零件代号=(select零件代号frominserted)
and库存数量>=(select出库数量frominserted))
begin
begin
print'零件库存够出售'
update零件信息登记
set库存数量=库存数量-(select出库数量frominserted)
where零件代号=(select零件代号frominserted)
end
insertinto零件出库登记
select零件代号,出货代号,出货人工作号,名称,种类,价格,出库数量,取货单号,出库时间
frominserted
end
else
begin
print'零件库存数量不够,不能出售!
'
end
end
else
begin
print'仓库里没有此零件,请通知公司'
end
--对触发器“tri_统一零件管理”的相关验证信息
execpro_ins3'20112002',1120,'f112a','龙头','金属',9.3,10,'东华理工'
execpro_ins3'20112004',1143,'f113a','书包','布料',52,1000,'南昌'
execpro_ins3'20112045',1220,'f114b','铅笔','用具',9.3,10,'江西'
execpro_ins3'20112046',1128,'g112a','锁','金属',9.3,10,'云南'
execpro_select
-----------------------------------------------------------------
--对“零件进库登记”数据更改是触发对“零件信息登记”的更改
--同时防止对“零件进库登记”信息的非法更改
createtriggertri_up零件进库
on零件进库登记
afterupdate
as
ifexists(select零件代号fromdeletedwhere零件代号=(select零件代号frominserted)
and进货代号=(select进货代号frominserted)
and进库数量>(select进库时间frominserted))
update零件信息登记
set库存数量=库存数量+(select进库数量frominserted)-(select进库数量fromdeleted)
elseifexists(select零件代号fromdeletedwhere零件代号=(select零件代号frominserted)
and进货代号=(select进货代号frominserted)
and进库数量<=(select进库时间frominserted))
update零件信息登记
set库存数量=库存数量+(select进库数量frominserted)-(select进库数量fromdeleted)
else
begin
print'修改不正确'
end
---------------------------------------------------------------------
--对触发器“tri_up零件进库”的相关验证信息
update零件进库登记
set进库数量=120
where零件代号='20112002'and进货代号=1120
update零件进库登记
set进库数量=5000
where零件代号='20112002'and进货代号=2187
execpro_select
--------------------------------------------------------
--对“零件出库登记”数据更改是触发对“零件信息登记”的更改
--同时防止对“零件进库登记”信息的非法更改
createtriggertri_up零件出库
on零件出库登记
afterupdate
as
ifexists(select零件代号fromdeletedwhere零件代号=(select零件代号frominserted)
and出货代号=(select出货代号frominserted)
and出库数量<=(select出库时间frominserted))
update零件信息登记
set库存数量=库存数量+(select出库数量frominserted)-(select出库数量fromdeleted)
elseifexists(select零件代号fromdeletedwhere零件代号=(select零件代号frominserted)
and出货代号=(select出货代号frominserted)
and出库数量>(select出货代号frominserted))
update零件信息登记
set库存数量=库存数量+(select出库数量frominserted)-(select出库数量fromdeleted)
else
begin
print'修改不正确'
end
--------------------------------------------------------------------
--对触发器“tri_up零件出库”的相关验证信息
update零件出库登记
set出库数量=20
where零件代号='20112002'and出货代号=1120
update零件出库登记
set出库数量=120
where零件代号='20112004'
update零件出库登记
set出货代号=620
where零件代号='20112004'
execpro_select
--------------------------------------------------------------------
--一下代码为创建相关规则、试图、用户并授权,来完成数据库的完整性和安全性
---相关的验证信息省略
createruleru_零件数量
as
@num>=0
execsp_bindrule'ru_零件数量','零件信息登记.库存数量'
execsp_bindrule'ru_零件数量','零件进库登记.进库数量'
execsp_bindrule'ru_零件数量','零件出库登记.出库数量'
execpro_ins1'20112011','龙头','金属',9.3,-10
execpro_ins2'20112012','龙头','金属',9.3,-100,'东华理工'
-execpro_ins3'20112013','龙头','金属',9.3,-100,'东华理工'
createviewview_零件进出库(零件代号,进库数量,出库数量)
as
select零件进库登记.零件代号,进库数量,出库数量
from零件进库登记,零件出库登记
where零件进库登记.零件代号=零件出库登记.零件代号
createviewview_零件库存情况
as
select零件代号,库存数量
from零件信息登记
select*
fromview_零件进出库
select*
fromview_零件库存情况