数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图Word文件下载.docx
《数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告 附存储过程和触发器模版+数据库脚本文档模版+分析及er图Word文件下载.docx(38页珍藏版)》请在冰豆网上搜索。
图1.ER图
3.物理设计
2.1数据表设计
图2.表结构图
2.2创建表脚本
2.2.1【用户表】
(1)创建表语句
createtableADMIN
(
ACCOUNTchar(20)notnull,
CIPHERchar(20),
primarykey(ACCOUNT)
);
(2)插入测试数据语句
insertintoadminvalues('
12201504'
'
12345'
2.2.2【商品表】
createtableSP
SCODEchar(20)notnull,
SNAMEchar(20)notnull,
STAPEchar(20),
SPLACEchar(20),
primarykey(SCODE)
insertintospvalues('
1'
乐事薯片'
食物'
广东'
2'
牛肉干'
3'
瓜子'
干果'
4'
可乐'
饮料'
5'
雪碧'
2.2.3【仓库表】
createtableCK
CCODEchar(20)notnull,
CNAMEchar(20),
CADDRESSchar(20),
primarykey(CCODE)
insertintockvalues('
南昌仓库'
南昌'
长沙仓库'
长沙'
武汉仓库'
武汉'
2.2.4【入库表】
createtableINPUT
Nintnotnull,
SCODEchar(20),
CCODEchar(20),
INNUMBERint,
INTIMEdatetime,
INREASONchar(20),
primarykey(N),
foreignkey(scode)referencessp(scode),
foreignkey(ccode)referencesck(ccode)
insertintoinputvalues('
1000'
2014-6-10'
进货'
100'
2014-6-11'
退货'
300'
200'
2014-6-12'
2.2.5【仓库管理员表】
createtableWORKER
WCODEchar(20)notnull,
WNAMEchar(20),
WPOSITIONchar(20),
primarykey(WCODE),
insertintoworkervalues('
11'
奥巴马'
员工'
12'
奥特曼'
仓库经理'
13'
奥利奥'
仓库副经理'
21'
汤姆克鲁斯'
22'
小罗伯特唐尼'
23'
尼古拉斯凯奇'
31'
大螺丝'
32'
伊瑟拉'
33'
安东尼达斯'
2.2.6【销售日志表】
createtableSALE
SNUMBERint,
SMONEYfloat(20),
STIMEdatetime,
foreignkey(scode)referencessp(scode)
insertintosalevalues('
250'
500'
2.2.7【库存表】
createtableSTORENUM
CCODEchar(20),
SCODEchar(20),
TOTALNUMint,
foreignkey(ccode)referencesck(ccode),
foreignkey(scode)referencessp(scode)
insertintostorenumvalues('
5000'
4.功能实现
4.1查询及视图设计
4.1.1商品信息查询
(1)主要功能:
根据商品编号查询商品全部信息
(2)查询设计:
select*fromspwherescode=’1’;
4.1.2仓库信息查询
根据仓库编号查询仓库全部信息
select*fromckwhereccode=’2’;
4.1.3商品销售情况查询
根据商品编号查询商品销售情况全部信息
select*fromsalewherescode=’1’;
4.1.4仓库管理员信息查询
根据管理员编号查询仓库管理员全部信息
select*fromworkerwherewcode=’12’;
4.1.5入库信息根据编号查询
根据入库时的顺序编号查询入库的全部信息
select*frominputwheren=’1’;
4.1.6入库信息根据入库时间及商品编号查询
根据入库时间及商品的编号查询入库的全部信息
select*frominputwhereintime=’2014-6-11’,scode=’2’;
4.1.7仓库全部商品库存信息查询
根据仓库编号查询该仓库的全部商品库存信息
select*fromstorenumwhereccode=’1’;
4.1.8查询某地生产的商品在某地仓库中的库存信息
查询南昌生产的商品在武汉仓库中的库存信息
select*fromstorenum
whereccodein(selectccodefromckwherecaddress='
)
andscodein(selectscodefromspwheresplace='
4.1.9查询库存量超过制定数额的商品名称及仓库地址
查询库存量超过1000的商品名称及仓库地址
selectsname,caddressfromck,sp,storenum
whereck.ccode=storenum.ccodeandsp.scode=storenum.scodeandtotalnum>
1000;
4.1.10查询存储某地生产的全部商品的仓库信息
查询存储南昌生产的全部商品的仓库信息
select*fromckwhere
notexists(select*fromspwheresplace='
南昌'
andnotexists(select*fromstorenumwherestorenum.scode=sp.scode));
4.1.11查询某地仓库中的员工总数
查询南昌仓库中的员工总数
selectcount(*)fromworker
whereccodein(selectccodefromckwherecaddress='
4.1.12统计因进货而入库的的商品信息并按它们的进货数量升序排列
统计因进货而入库的的商品信息并按它们的进货数量升序排列
select*frominputwhereinreason='
orderbyinnumber;
4.2存储过程设计
4.2.1input_input
商品退回或进货时,向入库表中插入信息
(2)参数说明:
序号
参数名称及数据类型(英文名称)
参数含义及说明
1
@nint
顺序号(主键)
2
@scodechar(20)
商品号
3
@ccodechar(20)
仓库号
4
@innumberint
入库数量
5
@intimedatetime
入库时间
6
@inreasonchar(20)
入库原因
(3)流程描述
声明变量接收数据并将全部数据插入入库表中
(4)代码及注释
createprocedureinput_input
(@nint,@scodechar(20),@ccodechar(20),@innumberint,@intimedatetime,@inreasonchar(20))
as
insertintoinputvalues
(@n,@scode,@ccode,@innumber,@intime,@inreason);
4.2.2drop_sale
商品退货时,根据顺序号可删除销售日志中的记录
销售日志表中的顺序号(主键)
输入接收顺序号,并根据顺序号删除销售日志中的该行信息
createproceduredrop_sale
(@nint)
deletefromsalewheren=@n;
4.2.3cipher_admin
修改该系统用户的密码
@ACCOUNTchar(20)
用户账号
@CIPHERchar(20)
用户新密码
根据输入的用户账号,使用新密码更新该账号的旧密码
createprocedurechange_admin
(@ACCOUNTchar(20),@CIPHERchar(20))
updateadminsetcipher=@cipherwhereaccount=@account;
4.2.4storenum_sp
查询某地生产的商品在某地仓库中的库存信息
@splacechar(20)
商品产地
@caddresschar(20)
仓库地址
1.输入并接收商品产地和仓库地址
2.使用select语句根据商品产地和仓库地址找出商品号,仓库号并输出与商品号,库存号相同的全部库存信息
createprocedurestorenum_sp
(@splacechar(20),@caddresschar(20))
as
select*fromstorenumwhereccodein(selectccodefromckwherecaddress=@caddress)
andscodein(selectscodefromspwheresplace=@splace);
4.2.5totalnum_caddress
查询库存量超过3000的商品名称及仓库地址
无
无参数及返回值
将三张表进行连接,并筛选出库存量大于3000的条目,输出其·
全部信息
createproceduretotalnum_caddress
whereck.ccode=storenum.ccodeandsp.scode=storenum.scodeandtotalnum>
3000
4.2.6ck_splace
查询存储某地生产的全部商品的仓库信息
使用select语句,根据输入的商品产地,找出某一个仓库,不存在一个商品的产地是该商品产地,这个商品没有被这个仓库储存,并输出这个仓库的全部信息
createprocedureck_splace
(@splacechar(20))
select*fromckwherenotexists(select*fromspwheresplace=@splace
andnotexists(select*fromstorenumwherestorenum.scode=sp.scode));
4.3触发器设计
4.3.1触发器1
(1)简介
触发器名称:
in_storenum
监听的表名:
Storenum//库存
监听的操作类型:
Insert
功能描述:
商品入库时,更新该商品库存量,若库存中没有该商品,则添加其商品信息入库存表
(2)详细操作流程
【详细说明该存储过程的操作过程,可以用伪代码、流程图或自然语言】
1.声明标量接收inserted表中的商品号,仓库号,入库数量
2.找出库存表中最大的顺序号(主键),加一后用标量@n接收
3.用select语句找出库存表中是否存在需入库的该商品信息
4.判断若存在该商品,则库存量加上入库数量
5.若不存在,则插入该商品信息,库存量存储为入库数量
(3)代码及注释
createtriggerin_storenumoninput
forinsertas
declare@scodechar(20),@ccodechar(20),@innumberint,@aint,@max_nint
select@scode=scode,@ccode=ccode,@innumber=innumberfrominserted
select@a=count(*)fromstorenumwherescode=@scodeandccode=@ccode
if@a>
updatestorenumsettotalnum=totalnum+@innumberwherescode=@scodeandccode=@ccode
else
begin
select@max_n=max(n)fromstorenum
insertintostorenumvalues(@max_n+1,@ccode,@scode,@innumber)
end;
4.3.2触发器2
de_storenum
Sale//销售日志
商品售出而在销售日志中插入出售记录时,更新库存,使库存中的商品数量减少出售的数量
1.声明变量从inserted表中接收商品号,出售数量
2.更新库存表,使得该商品库存量减少出售数量
createtriggerde_storenumonsale
declare@scodechar(20),@snumberint
select@scode=scode,@snumber=snumberfrominserted
updatestorenumsettotalnum=totalnum-@snumberwherescode=@scode;
4.3.3触发器1
storenum_totalnum
Storenum//库存表
Update
当更新库存表时,监控商品的库存总量,若库存总量超过5000时,
提示'
存入量超标,任意商品存储量应小于5000!
!
'
并回滚操作
取消之前的更新操作
1.声明变量从inserted表中接收库存总量
2.判断该库存总量是否大于5000
3.若大于5000,则提示文字,并回滚操作
createtriggerstorenum_totalnumonstorenum
forupdateas
declare@totalnumint
select@totalnum=totalnumfrominserted
if@totalnum>
=5000
begin
print('
)
rollbacktransaction
4.3.4触发器1
change_sale_n
Sale//销售日志(该触发器也修改并使用在入库表和库存表中)
当向销售日志表插入数据,顺序号(主键)与表中的末尾顺序号不连接时,自动修改成连接的数字(该触发器也修改并使用在入库表和库存表中)
1.声明变量接收inserted表中的需要插入顺序号
2.数出从销售日志中的总行数并赋值给变量@old_n
3.将总行数@old_n赋值给刚插入那一行的顺序号
createtriggerchange_sale_nonsale
forinsertas
declare@new_nint,@old_nint
select@new_n=nfrominserted
select@old_n=coun