1、 图1.ER图3. 物理设计2.1 数据表设计 图2.表结构图2.2 创建表脚本2.2.1 【用户表】(1)创建表语句create table ADMIN( ACCOUNT char(20) not null, CIPHER char(20) , primary key (ACCOUNT);(2)插入测试数据语句insert into admin values(12201504,123452.2.2 【商品表】create table SP SCODE char(20) not null, SNAME char(20) not null, STAPE char(20) , SPLACE cha
2、r(20) , primary key (SCODE)insert into sp values(1乐事薯片食物广东2牛肉干3瓜子干果4可乐饮料5雪碧2.2.3 【仓库表】create table CK CCODE char(20) not null, CNAME char(20) , CADDRESS char(20) , primary key (CCODE)insert into ck values(南昌仓库南昌长沙仓库长沙武汉仓库武汉2.2.4 【入库表】create table INPUT N int not null, SCODE char(20) , CCODE char(20)
3、 , INNUMBER int , INTIME datetime , INREASON char(20) , primary key (N), foreign key (scode) references sp(scode), foreign key (ccode) references ck(ccode)insert into input values(10002014-6-10进货1002014-6-11退货3002002014-6-122.2.5 【仓库管理员表】create table WORKER WCODE char(20) not null, WNAME char(20) ,
4、WPOSITION char(20) , primary key (WCODE),insert into worker values(11奥巴马员工12奥特曼仓库经理13奥利奥仓库副经理21汤姆克鲁斯22小罗伯特唐尼23尼古拉斯凯奇31大螺丝32伊瑟拉33安东尼达斯2.2.6 【销售日志表】create table SALE SNUMBER int , SMONEY float(20) , STIME datetime , foreign key (scode) references sp(scode)insert into sale values(2505002.2.7 【库存表】creat
5、e table STORENUMCCODE char(20) ,SCODE char(20) , TOTALNUM int , foreign key (ccode) references ck(ccode),foreign key (scode) references sp(scode)insert into storenum values(50004. 功能实现4.1 查询及视图设计 4.1.1商品信息查询(1)主要功能: 根据商品编号查询商品全部信息(2)查询设计:select * from sp where scode=1; 4.1.2仓库信息查询 根据仓库编号查询仓库全部信息sele
6、ct * from ck where ccode=2;4.1.3商品销售情况查询根据商品编号查询商品销售情况全部信息select * from sale where scode=1;4.1.4仓库管理员信息查询根据管理员编号查询仓库管理员全部信息select * from worker where wcode=12;4.1.5入库信息根据编号查询根据入库时的顺序编号查询入库的全部信息select * from input where n=1;4.1.6入库信息根据入库时间及商品编号查询根据入库时间及商品的编号查询入库的全部信息select * from input where intime=2
7、014-6-11,scode=2;4.1.7仓库全部商品库存信息查询根据仓库编号查询该仓库的全部商品库存信息select * from storenum where ccode=1;4.1.8查询某地生产的商品在某地仓库中的库存信息查询南昌生产的商品在武汉仓库中的库存信息select * from storenum where ccode in (select ccode from ck where caddress=) and scode in (select scode from sp where splace=4.1.9查询库存量超过制定数额的商品名称及仓库地址查询库存量超过1000的商
8、品名称及仓库地址select sname,caddress from ck,sp,storenum where ck.ccode=storenum.ccode and sp.scode=storenum.scode and totalnum1000;4.1.10查询存储某地生产的全部商品的仓库信息查询存储南昌生产的全部商品的仓库信息select * from ck where not exists(select * from sp where splace=南昌 and not exists(select * from storenum where storenum.scode=sp.scod
9、e);4.1.11查询某地仓库中的员工总数查询南昌仓库中的员工总数select count(*) from worker where ccode in (select ccode from ck where caddress=4.1.12统计因进货而入库的的商品信息并按它们的进货数量升序排列统计因进货而入库的的商品信息并按它们的进货数量升序排列select * from input where inreason= order by innumber;4.2 存储过程设计4.2.1 input_input 商品退回或进货时,向入库表中插入信息(2)参数说明:序号参数名称及数据类型(英文名称)参数
10、含义及说明1n int顺序号(主键)2scode char(20)商品号3ccode char(20)仓库号4innumber int入库数量5intime datetime入库时间6inreason char(20)入库原因(3)流程描述声明变量接收数据并将全部数据插入入库表中(4)代码及注释create procedure input_input(n int,scode char(20),ccode char(20),innumber int,intime datetime,inreason char(20)as insert into input values(n,scode,ccode
11、,innumber,intime,inreason);4.2.2 drop_sale 商品退货时,根据顺序号可删除销售日志中的记录销售日志表中的顺序号(主键)输入接收顺序号,并根据顺序号删除销售日志中的该行信息create procedure drop_sale(n int) delete from sale where n=n;4.2.3 cipher_admin 修改该系统用户的密码ACCOUNT char(20)用户账号CIPHER char(20)用户新密码根据输入的用户账号,使用新密码更新该账号的旧密码create procedure change_admin(ACCOUNT cha
12、r(20),CIPHER char(20) update admin set cipher=cipher where account=account;4.2.4 storenum_sp 查询某地生产的商品在某地仓库中的库存信息splace char(20)商品产地caddress char(20)仓库地址1. 输入并接收商品产地和仓库地址2. 使用select语句根据商品产地和仓库地址找出商品号,仓库号并输出与商品号,库存号相同的全部库存信息create procedure storenum_sp(splace char(20),caddress char(20)asselect * from
13、 storenum where ccode in (select ccode from ck where caddress=caddress) and scode in (select scode from sp where splace=splace);4.2.5 totalnum_caddress 查询库存量超过3000的商品名称及仓库地址无无参数及返回值将三张表进行连接,并筛选出库存量大于3000的条目,输出其全部信息create procedure totalnum_caddress where ck.ccode=storenum.ccode and sp.scode=storenum
14、.scode and totalnum30004.2.6 ck_splace 查询存储某地生产的全部商品的仓库信息使用select语句,根据输入的商品产地,找出某一个仓库,不存在一个商品的产地是该商品产地,这个商品没有被这个仓库储存,并输出这个仓库的全部信息create procedure ck_splace(splace char(20)select * from ck where not exists(select * from sp where splace=splace and not exists(select * from storenum where storenum.scode
15、=sp.scode);4.3 触发器设计4.3.1 触发器1(1)简介触发器名称:in_storenum监听的表名:Storenum /库存监听的操作类型:Insert功能描述:商品入库时,更新该商品库存量,若库存中没有该商品,则添加其商品信息入库存表(2)详细操作流程【详细说明该存储过程的操作过程,可以用伪代码、流程图或自然语言】1. 声明标量接收inserted表中的商品号,仓库号,入库数量2. 找出库存表中最大的顺序号(主键),加一后用标量n接收3. 用select语句找出库存表中是否存在需入库的该商品信息4. 判断若存在该商品,则库存量加上入库数量5. 若不存在,则插入该商品信息,库存
16、量存储为入库数量(3)代码及注释create trigger in_storenum on inputfor insert as declare scode char(20),ccode char(20),innumber int,a int,max_n intselect scode=scode,ccode=ccode,innumber=innumber from insertedselect a=count(*) from storenum where scode=scode and ccode=ccodeif a update storenum set totalnum=totalnum
17、+innumber where scode=scode and ccode=ccodeelsebegin select max_n=max(n) from storenum insert into storenum values(max_n+1,ccode,scode,innumber)end;4.3.2 触发器2de_storenumSale /销售日志商品售出而在销售日志中插入出售记录时,更新库存,使库存中的商品数量减少出售的数量1. 声明变量从inserted表中接收商品号,出售数量2. 更新库存表,使得该商品库存量减少出售数量create trigger de_storenum on
18、saledeclare scode char(20),snumber intselect scode=scode,snumber=snumber from insertedupdate storenum set totalnum=totalnum-snumber where scode=scode;4.3.3 触发器1storenum_totalnumStorenum /库存表Update当更新库存表时,监控商品的库存总量,若库存总量超过5000时,提示存入量超标,任意商品存储量应小于5000!并回滚操作取消之前的更新操作1. 声明变量从inserted表中接收库存总量2. 判断该库存总量是否
19、大于50003. 若大于5000,则提示文字,并回滚操作create trigger storenum_totalnum on storenumfor update asdeclare totalnum intselect totalnum=totalnum from insertedif totalnum=5000begin print() rollback transaction4.3.4 触发器1change_sale_nSale /销售日志(该触发器也修改并使用在入库表和库存表中)当向销售日志表插入数据,顺序号(主键)与表中的末尾顺序号不连接时,自动修改成连接的数字(该触发器也修改并使用在入库表和库存表中)1. 声明变量接收inserted表中的需要插入顺序号2. 数出从销售日志中的总行数并赋值给变量old_n3. 将总行数old_n赋值给刚插入那一行的顺序号create trigger change_sale_n on salefor insert asdeclare new_n int,old_n intselect new_n=n from insertedselect old_n=coun
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1