一、需求分析根据用户对该系统需求的描述,系统包括以下几个子系统:1.职工管理要求能够查询某家门店的职工情况,职工的详细信息;能够添加、删除及更新。2.门店管理要求能够提供销售情况。如某门店在某天销售了哪些药品,销售额是多少,某月各门店日平均销售额是多少;能够添加、删除及更新。3.药品管理要求能够查询某家门店的某药品存量,或某药品在哪个门店有货,有多少;能够添加、删除及更新。4.供应商管理要求能够查询某门店的某种药品来自于哪个供应商,来自于哪个城市;能够添加、删除及更新。综合以上需求,设计如下数据结构:1.数据结构:职工含义:记录职工的基本信息。组成:编号,姓名,所属门店编号,性别,年龄,职务2.数据结构:门店含义:记录门店的基本信息。组成:编号,地址,邮编,电话。3.数据结构:销售额含义:记录各门店的每日销售情况。组成:门店编号,药品编号,销售数量,单价,日期。4.数据结构:药品含义:记录药品的基本信息。组成:编号,名称,条码。5.数据结构:存货量含义:记录药品在各门店的存货情况。组成:药品编号,门店编号,存货量。6.数据结构:供应商含义:记录供应商的基本信息。组成:编号,名称,城市,地址,电话。7.数据结构:供应含义:记录各门店的进货情况。组成:门店编号,药品编号,供应商编号,进货单价,进货数量,进货日期。数据字典:数据项类型长度取值范围与其他数据项的逻辑关系职工编号字符型55Byte非空且可以唯一标识一个职工职工姓名字符型60-6Byte非空职工性别字符型22Byte非空职工年龄无符号整型11Byte非空且不小于18职工职务字符型100-10Byte非空门店编号字符型55Byte非空且可以唯一标识一个门店门店地址字符型500-50Byte非空门店邮编字符型66Byte门店电话字符型150-15Byte非空药品编号字符型50-5Byte非空且可以唯一标识一种药品药品名称字符型200-20Byte非空药品条码字符型200-20Byte非空且唯一销售数量无符号整型50-5Byte不小于0销售单价浮点型100-10Byte不小于0销售日期DATE型2020Byte非空存货量无符号整型50-5Byte不小于0供应商编号字符型55Byte非空且可以唯一标识一个供应商供应商名称字符型200-20Byte非空供应商城市字符型200-20Byte供应商地址字符型200-20Byte供应商电话字符型200-20Byte进货单价浮点型100-10Byte非空且不小于0进货数量无符号整型50-5Byte非空且不小于0进货日期DATE型2020Byte非空1mmnmnm药品储存销售供应门店职工工作编号姓名性别年龄职务编号地址邮编电话数量单价日期存货量编号名称条码单价数量日期供应商编号名称电话地址城市pn二、ER图三、关系模式根据ER图设计关系模式如下:将每个实体转化为一个关系模式,职工与门店的m:1的联系与m端的关系模式合并,门店与药品的m:n的销售联系和储存联系转化为单独的关系模式,门店、药品与供应商之间的m:n:p的联系转化为单独的关系模式,得到所有的关系模式如下(下划线的属性为主码):职工(编号,姓名,性别,年龄,职务,所属门店编号)Employee(Eno,Ename,Esex,Eage,Estate,SHno);门店(编号,地址,邮编,电话)Shop(SHno,SHaddress,SHpost,SHtel);药品(编号,名称,条码)Drug(Dno,Dname,Dnum);供应商(编号,名称,城市,地址,电话)Supplier(SUno,SUname,SUcity,SUaddress,SUtel);销售(门店编号,药品编号,数量,单价,日期)Sale(SHno,Dno,SAamout,SAprice,SAdate);储存(门店编号,药品编号,存货量)Store(SHno,Dno,STamout);供应(门店编号,供应商编号,药品编号,单价,数量,日期)Supply(SHno,SUno,Dno,Sprice,Samout,Sdate)。四、规范化1.职工(编号,姓名,性别,年龄,职务,所属门店编号)每个职工的编号是唯一的,允许同名。该关系模式的函数依赖:{编号→姓名,编号→性别,编号→年龄,编号→职务,编号→所属门店编号}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。2.门店(编号,地址,邮编,电话)每个门店的编号是唯一的。该关系模式的函数依赖:{编号→地址,编号→邮编,编号→电话}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。3.药品(编号,名称,条码)每种药品的编号是唯一的,条码也是唯一的。该关系模式的函数依赖:{编号→名称,编号→条码,条码→名称,条码→编号}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。4.供应商(编号,名称,城市,地址,电话)该关系模式的函数依赖:{编号→名称,编号→城市,编号→地址,编号→电话}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。5.销售(门店编号,药品编号,数量,单价,日期)该关系模式的函数依赖:{(门店编号,药品编号,日期)→数量,(门店编号,药品编号,日期)→单价}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。6.储存(门店编号,药品编号,存货量)该关系模式的函数依赖:{(门店编号,药品编号)→存货量}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。7.供应(门店编号,供应商编号,药品编号,单价,数量,日期)该关系模式的函数依赖:{(门店编号,供应商编号,药品编号,日期)→单价,(门店编号,供应商编号,药品编号,日期)→数量}非主属性完全函数依赖于码,并且不存在非主属性对码的传递依赖,属3NF。五、建表语句createtableEmployee(EnoCHAR(5)PRIMARYKEY,EnameVARCHAR(6)NOTNULL,EsexCHAR(2)NOTNULL,EageSMALLINT(1)CHECK(Eage=18),EstateVARCHAR(10)NOTNULL,SHnoCHAR(5)NOTNULL,FOREIGNKEY(SHno)REFERENCESShop(SHno));createtableShop(SHnoCHAR(5)PRIMARYKEY,SHaddressVARCHAR(50)NOTNULL,SHpostCHAR(6),SHtelVARCHAR(15)NOTNULL);createtableDrug(DnoCHAR(5)PRIMARYKEY,DnameVARCHAR(20)NOTNULL,DnumVARCHAR(20)NOTNULLUNIQUE);createtableSupplier(SUnoCHAR(5)PRIMARYKEY,SUnameVARCHAR(20)NOTNULL,SUcityVARCHAR(20),SUaddressVARCHAR(20),SUtelVARCHAR(20));createtableSale(SHnoCHAR(5),DnoCHAR(5),SAamoutSMALLINTCHECK(SAamout=0),SApriceFLOAT(10)CHECK(SAprice=0),SAdateDATENOTNULL,PRIMARYKEY(SHno,Dno,SAdate)FOREIGNKEY(SHno)REFERENCESShop(SHno),FOREIGNKEY(Dno)REFERENCESDrug(Dno));createtableStore(SHnoCHAR(5),DnoCHAR(5),STamoutSMALLINTCHECK(STamout=0),PRIMARYKEY(SHno,Dno),FOREIGNKEY(SHno)REFERENCESShop(SHno),FOREIGNKEY(Dno)REFERENCESDrug(Dno));createtableSupply(SUnoCHAR(5),DnoCHAR(5),SpriceFLOAT(5)NOTNULLCHECK(Sprice=0),SamoutSMALLINTNOTNULLCHECK(Samout=0),SdateDATENOTNULL,PRIMARYKEY(SUno,Dno,Sdate),FOREIGNKEY(SUno)REFERENCESSupplier(SUno),FOREIGNKEY(Dno)REFERENCESDrug(Dno))六、查询1.查询某家门店的职工情况,职工的详细信息。例如查询编号为“11111”的店的职工信息:select*fromEmployeewhereSHno=’11111’;2.查询某家门店的某药品存量?或某药品在哪个门店有货?有多少?例如查询编号为“11111”的门店的编号为“22222”的药品存量:selectSTamoutfromStorewhereSHno=’11111’andDno=’22222’;例如查询编号为“22222”的药品在那个门店有货及存货量:selectSHno,STamoutfromStorewhereDno=’22222’andSTamout0;3.提供销售情况。如某门店在某天销售了哪些药品?销售额是多少?某月各门店日平均销售额是多少?例如查询编号为“11111”的门店在2010年11月1号销售了哪些药品(显示药品编号及名称),销售额是多少:selectSale.Dno,Dname,SAamout,SAprice,SAamout*SApriceasTotalfromSale,DrugwhereSHno=’11111’andSAdate=2010-11-1andSale.Dno=Drug.Dno;4.能够查询某门店的某种药品来自于哪个供应商?来自于哪个城市?例如查询编号为“11111”的门店的编号为“22222”的药品来自于哪个供应商(显示编号及名称),来自于哪个城市:selectdistinctSUno,SUname,SUcityfromSupply,SupplierwhereSHno=’11111’andDno=’22222’andSupply.SUno=Supplier.SUno;5.需要具有数据插入,删除以及更新功能。例如向Drug表中插入编号为22222、名称为板蓝根冲剂、条码为123456789SA的药品:insertintoDrugvalues(‘22222’,’板蓝根冲剂’,’123456789SA’);例如删除编号为11111的供应商信息:deletefromSupplierwhereSUno=’11111’;例如将编号为11111的门店中的编号为22222的药品存货量改为12updateStoresetSTamout=12whereSHno=’11111’andDno=’22222’;