超市销售数据库.docx
《超市销售数据库.docx》由会员分享,可在线阅读,更多相关《超市销售数据库.docx(19页珍藏版)》请在冰豆网上搜索。
超市销售数据库
超市销售数据库
数据库系统课程设计
题目超市销售管理数据库设计
院系信息技术与工程学院
专业计算机科学与技术
姓名
学号
班级名称
指导教师
成绩
2016年12月15日
图1-3销售处理结构图
二、概念模型
1、分E-R图建立
根据分解第二层数据流程图可分别得到三个分E-R图。
2、全局/整体E-R图
由于在做局部E—R图时,只考虑了局部功能模块,这样会导致各个E—R图之间有很多不一致的地方,造成在合并各分E—R图生成全局E—R图时有很多冲突。
通过仔细分析各个分E-R图之间的联系,消除冗余,消除冲突,最终成功生成全局E-R图,如下图所示。
三、关系数据模型
1、关系模式建立
关系模型由E—R图转换而来,实际上就是要将实体、实体的属性和实体之间的联系明确表示出来,这种转换一般遵循如下规则:
一个实体型转换为一个关系模式。
实体的属性就是关系的属性,实体的码就是关系的码。
此数据库系统包括营业员、会员、管理员、商品、货架、销售单、销售商品、退货单、打印多个关系模式:
营业员(营业员号,姓名,收银台位置,上班时间,下班时间,月薪,联系电话);
会员(会员卡号,会员姓名,卡密码,注册时间,累计消费);
商品(商品编号,货架编号,条形码,商品名称,商品价格,现有存量,存量底线,生产日期,保质期,供货商);
销售单(销售单编号,营业员编号,会员卡号,打印时间,有无折扣);
销售商品(销售单号,商品编号,销售数量);
货架(货架编号,管理员号,货架名称);
管理员(管理员号,姓名,联系电话,上班时间,下班时间,月薪);
退货单(退货单号,商品编号,退货数量);
打印(退货单号,销售单号,营业员号,打印时间);
2、用户子模式建立
用户子模式可通过建立视图来表示。
视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
定义视图可以简化应用程序、可以实现一定的权限控制。
为了满足用户需求及方便后期数据库实施阶段的设计,此系统设计了如下视图。
各视图定义:
商品保质期(商品名称,生产日期,保质期,过期日期)
下架商品(商品名称,货架名称,过期日期)
营业员基本信息(营业员号,上班时间,下班时间,月薪,联系电话)
会员总消费情况(卡号,姓名,累计消费)
商品价格(商品名称,价格)
商品存放(商品名称,货架名称)
缺货商品(商品名称,现有存量,底线存量)
货架信息(货架名称,存放商品名)
上班情况(上班时间,营业员姓名,管理员姓名)
工作人员联系方式(姓名,编号,联系电话)
工作人员工资信息(姓名,编号,工资)
四、数据库物理设计
此数据库系统建立的索引如下所述。
(1)对于基本表ShopAssistant(营业员),由于要经常对属性列Snum查询从而获得某个营业员的完整信息,并且很少对其更新,因此可以给属性列Snum建一个聚簇索引。
(2)同理对于基本表Member(会员),由于要经常对属性列Mnum查询从而获得某个会员的完整信息,并且很少对其更新,因此可以给属性列Mnum建一个聚簇索引。
(3)对于Adminastrator(管理员),可在其属性列Anum上建立唯一性索引,索引值按降序排列。
(4)同样对于基本表GoodsShelf(货架)、Goods(商品),可在其主属性上建立唯一性索引。
(5)对于基本表BillSell(销售单)、SellGoods(销售商品)、ReturnGoods(退货单)、PrintBill(打印),由于其属性值经常发生变化,权衡系统为维护索引付出的代价,可考虑不建立索引。
五、数据库实施与测试
数据库实施与测试阶段主要内容包括数据库实施和测试两个部分。
1、数据库实施
1.1数据库及数据库对象建立
主要包括:
数据库、基本表、视图、索引、触发器以及存储过程。
相应T-SQL和PL/SQL语句详见附录.
1.2数据入库
对各个数据表成功要录入了50条左右的测试记录,测试结果满足设计要求。
2、数据库测试
数据库测试阶段主要内容是对建立的数据库及数据库对象进行测试,对测试结果进行分析,是否满足设计要求。
六、总结
通过数据库课程设计实习,对数据库知识有了更广泛的了解,在数据库的应用方面有了很大的收获。
(2)加深了对数据库系统相关知识和SQLSERVER2008数据库相关功能的理解。
以前只停留于记忆书本上关于数据库系统的理论知识,没有切身实地的实践过,而通过这次实习我再次加深了对数据库相关功能的理解与应用。
(3)进一步掌握相关的SQL语句。
开发设计超市销售管理系统的过程中牵涉到相当多基本表的建立,视图、索引以及存储过程的设计,这让我对这些SQL语句操作更熟练了。
(4)熟悉了对项目开发的大致过程。
这次系统开发,我更加明白体验到了数据库系统开发的过程,包括系统需求分析、概念设计、逻辑设计、物理设计,再到数据库实施、系统的测试和调试,对项目(系统)开发的大致流程有了一定的了解,为以后的系统的开发打下了良好的基础。
同样在在这次实习中,我看到了自己的基础知识的薄弱性,更体验到了基础知识的重要性。
比如说对具体的SQL语句还不是很熟悉,在画E-R图、设计带输出变量的存储过程以及建立相关索引(聚簇索引)时感到有些棘手。
遇到问题不可怕,其实能遇到问题是好事,它能让我在解决问题时学到更多的新知识,更能增加我的自信。
和传统管理模式相比较,使用本系统,毫无疑问会大大提高超市的运作效率,辅助提高超市的决策水平,管理水平,为降低经营成本,提高效益,减少差错,节省人力,减少顾客购物时间,增加客流量,提高顾客满意度,增强超市扩张能力,都能提供有效的技术保障。
但超市管理系统涉及范围宽,要解决的问题多,功能复杂,实现困难,本系统只能做出其中的销售管理部分功能,只适合小型超市使用。
由于自己初次独立设计开发数据库系统,能力非常有限,加上时间仓促,本系统毫无疑问有许多的不足之处。
对于出现的以上问题,我们深表歉意,恳请老师批评指正。
附录
1、创建数据库
createdatabaseSupermarket_SM;
2、创建基本表
createtableShopAssistant(
Snumchar(10)primarykey,
Snamechar(10)notnull,
Splacechar(10),
Swtimechar(10),
Sctimechar(10),
Ssalaarynumeric(10,1),
Sphonechar(20)
)
createtableAdministrator(
Anumchar(5)primarykey,
Anamechar(15)notnull,
Awtimechar(10),
Actimechar(10),
Asalarynumeric(10,1),
Aphonechar(25)
)
createtableMember(
Mnumchar(15)primarykey,
Mnamechar(15),
Mpasswordchar(6)notnull,
MregisterTimedate,
Mexpensenumeric(10,2)
)
createtableGoodsShelf(
GSnumchar(10)primarykey,
Anumchar(5)foreignkeyreferencesAdministrator(Anum),
GSnamechar(15),
)
createtableGoods(
Gnumchar(10)primarykey,
GSnumchar(10)foreignkeyreferencesGoodsShelf(GSnum),
Gbarcodechar(20),
Gnamechar(20),
Gpricenumeric(5,2),
GSstocksmallint,
GSlimitsmallint,
Gproducetimedate,
Gtimeint,
Gsupplierchar(50)
)
createtableBillSell(
Bnumchar(15)primarykey,
Snumchar(10)foreignkeyreferencesShopAssistant(Snum),
Mnumchar(15)foreignkeyreferencesMember(Mnum),
Bdatesmalldatetime,
Bdiscountchar
(2)
)
createtableSellGoods(
Bnumchar(15),
Gnumchar(10),
Bquantitysmallint,
primarykey(Gnum,Bnum),
foreignkey(Gnum)referencesGoods(Gnum),
foreignkey(Bnum)referencesBillSell(Bnum)
)
createtableReturnGoods(
Rnumchar(10)primarykey,
Gnumchar(10)foreignkeyreferencesGoods(Gnum),
Rquantitysmallint
)
createtablePrintBill(
Bnumchar(15),
Rnumchar(10),
Snumchar(10),
Rdatasmalldatetime,
primarykey(Bnum,Rnum,Snum),
foreignkey(Bnum)referencesBillSell(Bnum),
foreignkey(Rnum)referencesReturnGoods(Rnum),
foreignkey(Snum)referencesShopAssistant(Snum)
)
3、创建索引
(1)对于基本表ShopAssistant(营业员),由于要经常对属性列Snum查询从而获得某个营业员的完整信息,并且很少对其更新,因此可以给属性列Snum建一个聚簇索引。
其相应SQL语句为:
createclusteredindexdex_SnumonShopAssistant(Snum);
(2)同理对于基本表Member(会员),由于要经常对属性列Mnum查询从而获得某个会员的完整信息,并且很少对其更新,因此可以给属性列Mnum建一个聚簇索引。
其相应SQL语句为:
createclusteredindexdex_MunmonMember(Mnum);
(3)对于Adminastrator(管理员),可在其属性列Anum上建立唯一性索引,索引值按降序排列。
其相应SQL语句为:
createuniqueindexdex_AnumonAdministrator(Anumdesc);
(4)同样对于基本表GoodsShelf(货架)、Goods(商品),可在其主属性上建立唯一性索引。
其相应SQL语句为:
createuniqueindexdex_GSnumonGoodsShelf(GSnum);
createuniqueindexdex_GnumonGoods(Gnum);
4、创建视图
相应SQL语句为:
createviewV_Salesman
as
selectSnum,Swtime,Sctime,Ssalaary,Sphone
fromShopAssistant
createviewV_member
as
selectMnum,Mname,Mexpense
fromMember
createviewV_GoodsPrice
as
selectGname,Gprice
fromGoods
createviewV_GoodsStore
as
selectGname,GSname
fromGoods,GoodsShelf
whereGoods.GSnum=GoodsShelf.GSnum
createviewV_GoodsLack
as
selectGname,GSstock,GSlimit
fromGoods
whereGSstock<=GSlimit
createviewV_GoodsShelf
as
selectGSname,Gname
fromGoodsShelf,Goods
whereGoodsShelf.GSnum=Goods.GSnum
createviewV_Work
as
selectShopAssistant.Swtime,ShopAssistant.Sname,Administrator.Aname
fromShopAssistant,Administrator
whereShopAssistant.Swtime=Administrator.Awtime
createviewV_Phone(name,num,phone)
as
(selectSname,Snum,Sphone
fromShopAssistant)
union
(selectAname,Anum,Aphone
fromAdministrator)
createviewV_Salary(name,num,salary)
as
(selectSname,Snum,Ssalaary
fromShopAssistant)
union
(selectAname,Anum,Asalary
fromAdministrator)
createviewV_GoodsEnd
as
selectGname,Gproducetime,Gtime,DateAdd(DAY,Gtime,Gproducetime)EndTime
fromGoods
createviewV_GoodsUnload
as
selectGname,GoodsShelf.GSname,DateAdd(DAY,Gtime,Gproducetime)EndTime
fromGoods,GoodsShelf
whereDateAdd(DAY,Gtime,Gproducetime)<=GETDATE()
andGoods.GSnum=GoodsShelf.GSnum
createviewv_BillExpense
as
selectBnum,Gname,Gprice,Bquantity,(Bquantity*Gprice)TotalExpense
fromSellGoods,Goods
whereSellGoods.Gnum=Goods.Gnum
5、创建触发器
(1)当打印一张销售发票时,即删除数据库中刚建立的销售发票时,相应商品在货架上的现有存量减少,相应会员总消费额增加。
其相应SQL语句为:
createtriggert1onv_BillExpense
INSTEADOFdelete
as
declare@Quantityint,
@Gnamechar(10),
@TotalExpensefloat
--@Bnumchar(10)
select@Quantity=Bquantityfromdeleted
select@Gname=Gnamefromdeleted
--select@TotalExpense=TotalExpensefromdeleted
--select@Bnum=Bnumfromdeleted
updateGoods
setGSstock=GSstock-@Quantity
whereGoods.Gname=@Gname
--updateMember
--setMexpense=Mexpense+@TotalExpense
--where@Bnum=SellBill.Bnum
--andSellBill.Mnum=Mnum
(2)当从过期商品名单中删除某记录时,相应商品现有存量减少.
其相应SQL语句为:
createtriggert2onV_GoodsUnload
INSTEADOFdelete
as
declare@Gnamechar(10)
select@Gname=Gnamefromdeleted
deletefromGoods
whereGname=@Gname
(3)打印一张退货发票,即删除退货单中的记录,表示R商品重新返回原货架存储(假设脱货商品不影响第二次销售),货架商品现有存量增加.
其相应SQL语句为:
createtriggert3onReturnGoods
afterdelete
as
declare@Gnumchar(10),
@Rquantityint
select@Gnum=Gnumfromdeleted
select@Rquantityfromdeleted
updateGoods
setGSstock=GSstock+@Rquantity
whereGnum=@Gnum
6、建立储存过程
(1)计算某个销售单上,每种商品的累计销售额(即输出每种商品名称,件数,单价,费用小计)。
其相应SQL语句为:
createprocedurep_TotalExpense
(@BS_Bnumvarchar,
@Bnumvarcharoutput,
@Gnamevarcharoutput,
@Bquantityintoutput,
@Gpricenumericoutput,
@TotalExpensenumericoutput)
as
select@Bnum=Bnum,@Gname=Gname,@Bquantity=Bquantity,@Gprice=Gprice,@TotalExpense=(Bquantity*Gprice)
fromv_BillExpense
whereBnum=@BS_Bnum
其验证语句为:
Declare
@T_Bnumvarchar,
@T_Gnamevarchar,
@T_Bquantityint,
@T_Gpricevarchar,
@T_TotalExpensevarchar
Executep_TotalExpense'GS-0000004',@T_Bnumoutput,@T_Gnameoutput,@T_Bquantityoutput,@T_Gpriceoutput,@T_TotalExpenseoutput
Print@T_Bnum+''+@T_Gname+''+@T_Bquantity+''+@T_Gprice+''+@T_TotalExpense
(2)计算某个销售单上,顾客消费商品总数量和总消费额。
其相应SQL语句为:
createprocedurep_BillExpense
@BS_Bnumvarchar
as
selectBnum,sum(Bquantity)TotalQuantity,sum(TotalExpense)TotalExpense
fromv_BillExpense
groupbyBnum
havingBnum=@BS_Bnum
(3)查询某件商品价格。
其相应SQL语句为:
createprocedurep_price
@Gnamechar(10)
as
selectGprice
fromV_GoodsPrice
whereGname=@Gname
(4)查询某件商品现有数量。
其相应SQL语句为:
createprocedurep_Gquantity
@Gnamechar(10)
as
selectGSstock
fromGoods
whereGname=@Gname
(5)查询强制下架商品名单中商品名称和过期日期。
其相应SQL语句为:
createprocedurep_GoodsUnload
as
selectGname商品名,EndTime过期日期
fromV_GoodsUnload
(6)生成缺货单。
其相应SQL语句为:
createprocedurep_GoodsLack
as
selectv_GoodsLack.Gname商品名,v_GoodsLack.GSstock现有存量,GSname货架名
fromV_GoodsLack,Goods,GoodsShelf
whereV_GoodsLack.Gname=Goods.GnameandGoods.GSnum=GoodsShelf.GSnum
(7)查询指定某个月内的销售情况。
其相应SQL语句为:
createprocedurep_RankingList
@A_monthdate=getdate
as
selectGname,Bquantity,TotalExpense
fromv_BillExpense,BillSell
wherev_BillExpense.Bnum=BillSell.Bnum
andDATEPART(YEAR,@A_month)=DATEPART(YEAR,BillSell.Bdate)
andDATEPART(MONTH,@A_month)=DATEPART(MONTH,BillSell.Bdate)
其验证语句为:
Executep_RankingList@A_month='2010-5-1018:
18';
(8)查询指定工作人员的工资。
其相应SQL语句为:
createprocedurep_SalesmanSalary
@s_Snumchar(10)
as
selectSsalaary
fromV_Salesman
whereSnum=@s_Snum
(9)在某段时间内的上班人员名单。
其相应SQL语句为:
createprocedurep_TimeWork
@T_timechar(10)
as
select*
fromV_Work
whereSwtime=@T_time