这次暑期实训,因为疫情原因,我未返校,但学院仍然安排了三个实训,这篇随笔主要用于记录数据库课程设计的学习情况。
我选择了超市会员管理系统
1.课程设计目的通过数据库课程设计加深数据库基础理论及基础知识的理解,掌握利用数据库管理系统实现数据管理的基本思路和方法,培养分析问题、解决问题的能力
2.系统信息
日程记录如下:第一天2020年7月27日学生工作日志(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)1.了解系统的应用背景,了解开发要求,进行系统信息分析、系统需求分析、功能需求分析2.功能性需求分析时纠结要不要会员卡管理,本来觉得是另一个系统(支付系统)的功能,但反过来想想这个功能还是有必要的3.查阅资料,得知会员必不可少得有会员卡4.遇到难题时多查阅资料
第二天2020年7月28日学生工作日志(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)1.进行概念结构设计,画出数据流图,实体间的联系2.忘记了逻辑关系图是什么,怎么画3.问同学,和同学探讨4.逻辑关系图一般在数据库设计时通过软件自动生成,这样准确又方便
指导教师签字第四天2020年7月30日学生工作日志(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)1.将E-R图转换为关系模式,并进行各个数据表的表结构设计2.设计过程中没有考虑到需要满足3NF,导致得重新设计关系模式3.按照要求重新设计4.得按照要求去做,要不然会出错
第五天2020年7月31日学生工作日志:(主要包括:工作要点、出现问题、解决办法、结果和心得体会等)1.创建表、视图,设计完整性约束等2.创建表的时候直接将Excel表导入到了SQLSERVER导致出现一些问题3.重新手动创建表4.当出现错误时还是采用最稳妥的方法解决比较好
数据库设计文档目录1.系统设计的目的与意义22.系统需求分析32.1功能需求32.2系统功能结构32.3数据流图43.概念结构设计83.1实体间的联系83.2系统局部E-R图83.3系统全局E-R图114.逻辑结构设计124.1将E-R图转换为关系模式124.2逻辑关系图124.3各个数据表的表结构设计125.系统功能实现155.1建表155.2创建视图175.3存储过程175.4创建触发器185.5备份数据库185.6数据库还原186.总结19
1.系统设计的目的与意义超市会员管理是超市日常管理的重要一环,它帮助超市存储及管理会员的基本信息、管理会员卡、会员业务及会员消费信息,是一套比较完备的管理工具,极大地提高了超市会员管理的效率。增加了超市与顾客之间的交流,提升了服务质量,在很大程度上帮助了超市管理者对超市的掌握与管理。
2.2系统功能结构通过对系统功能的分析,画出如下结构图。
图2.1超市会员管理系统功能结构图
通过上图的功能分析,把系统划分为5个模块:
2.3数据流图
图2.2顶层数据流图
3.概念结构设计3.1实体间的联系1.一个会员只能办理一张会员卡2.一个会员消费得到多个消费信息3.一张会员卡可以查询多个消费信息4.一张会员卡可以查询一个业务信息3.2系统局部E-R图
图3.1会员基本信息E-R图
图3.2会员业务信息E-R图
图3.3会员卡E-R图
图3.4会员消费E-R图
图3.5会员联系E-R图
图3.6会员卡联系E-R
图3.7商品信息E-R图3.3系统全局E-R图图3.8系统E-R图
图4.1逻辑关系图4.3各个数据表的表结构设计
表4.2会员信息表
表4.3消费信息表
表4.4业务信息表
表4.5会员卡表
表4.6商品信息表
表4.7管理员信息表
5.系统功能实现5.1建表
图5.1业务信息表Business
图5.2会员基本信息表Info
图5.3会员卡表Card
图5.4管理员信息表Mana
图5.5商品信息表Product
图5.6购物信息表Shopping5.2创建视图
图5.7VIEW_INFO视图
图5.8VIEW_MONEYTABLE视图
图5.9VIEW_PRODUCTTYPE视图5.3存储过程CreateProcedurePro_money@Person_ID_inchar(10),@State_outchar(8)outputAsselect@State_out=StatefromCard,InfowhereCard.Person_ID=Info.Person_IDandInfo.Person_ID=@Person_ID_in
通过会员编号查看会员卡信息
CreateProcedurePro_ID@Name_invarchar(10),@Tel_inchar(16),@Card_ID_outchar(20),@Person_ID_outchar(10)asselect@Card_ID_out=Info.Card_ID,@Person_ID_out=Person_IDfromInfowhereName=@Name_inandTel=@Tel_in
CreateProcedurePro_shopping@Pro_code_inchar(20),@Con_date_outchar(20)asselect@Con_date_out=Con_datefromShoppingwhere@Pro_code_in=Pro_code
CreateProcedurePro_BU@Pack_type_inchar(8),@Mem_inte_outintasselect@Mem_inte_out=Mem_intefromBusinesswherePack_long=@Pack_type_in
通过套餐类型查询套餐积分
CreateProcedurePro_Product@Pro_code_inchar(20),@Price_outchar(10),@Amount_outintasselect@Price_out=Price,@Amount_out=AmountfromProductwherePro_code=@Pro_code_in
通过商品条形码查询数量和单价5.4创建触发器createtriggerpwd_info_trionInfoforinsert,updateasdeclare@pwd_readchar(10)select@pwd_read=Pwdfrominsertedif@pwd_read>=5and@pwd_read<=10beginprint'密码符合要求!'returnendprint'密码位数不在5~10之间,请重新输入!'rollbackTransaction
触发器限制密码的位数在5~10之间
createtriggertel_info_trionInfoforupdateasifupdate(Tel)begindeclare@tel_newchar(16),@tel_oldchar(16),@tel_cntintselect@tel_old=Telfromdeletedselect@tel_cnt=count(*)fromInfowhereTel=@tel_oldif@tel_cnt<>0RollbackTransactionEnd
createtriggermoney_info_trionShoppingforupdateasifupdate(Money)begindeclare@money_readintselect@money_read=Moneyfrominsertedif@money_read<0print'余额不足!'returnendRollbackTransaction
触发器限制卡内余额,余额不足会进行提示
createtriggerAmount_trionProductforinsertAsdeclare@amount_readintselect@amount_read=Amountfrominsertedif@amount_read>50print'数量大,请核实!'
触发器提示商品数量,当大于50个时会提示
createtriggertri_dconInfofordeleteasdeclare@Person_ID_delchar(8)select@Person_ID_del=Person_IDfromdeleteddeletefromCardwherePerson_ID=@Person_ID_del
图5.1数据库备份
5.6数据库还原RESTOREDATABASE061FROMdisk='C:\彭怀龙数据库\fullbackup_061'withREPLACE