![数据库系统原理餐厅点菜管理系统_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/59862b8d-184f-4a10-b92f-18254db6850a/59862b8d-184f-4a10-b92f-18254db6850a1.gif)
![数据库系统原理餐厅点菜管理系统_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/59862b8d-184f-4a10-b92f-18254db6850a/59862b8d-184f-4a10-b92f-18254db6850a2.gif)
![数据库系统原理餐厅点菜管理系统_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/59862b8d-184f-4a10-b92f-18254db6850a/59862b8d-184f-4a10-b92f-18254db6850a3.gif)
![数据库系统原理餐厅点菜管理系统_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/59862b8d-184f-4a10-b92f-18254db6850a/59862b8d-184f-4a10-b92f-18254db6850a4.gif)
![数据库系统原理餐厅点菜管理系统_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/59862b8d-184f-4a10-b92f-18254db6850a/59862b8d-184f-4a10-b92f-18254db6850a5.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1系统需求分析1.1.1 背景分析1.1.2 系统目标1.1.3 业务需求及处理流程1.1.4 功能需求及数据分析需求21.5 系统功能图4.1.6 业务规那么分析4.1.7 数据约束分析6.1.8 数据字典6.2数据库概念设计8.2.1 定义实体集及属性9.2.2 定义联系集及属性9.2.3 E-R模型设计9.3逻辑设计123.1 关系设计1.23.2 约束说明1.34数据库应用设计1.64.1 数据库脚本及数据库平安性设计.174.2 数据库触发器设计204.3 数据库存储过程的设计225物理设计235.1 关系模式存储方式选择235.1.1 索引存取方式,主要采用B+树索引方法235
2、.1.2 聚簇索引方式245.2 数据库的存储结构245.2.1 数据库的存放位置245.2.2 数据库的存放路径241系统需求分析系统需求分析,希望通过调查、讨论,分析应用系统将要提供的功能及未来数据库用户的数据需求,详细描述系统的实体、功能、规那么与约束,为以后的数据库系统的建立提供根底依据.1.1 背景分析随着科技的开展,许多新的技术已经成功运用于我们的日常生活之中,“衣、食、住、行每样都搭上了科技的快车.“民以食为天,吃饭可以说是人们日常生活中最重要的一局部.人们生活水平的提升也使得大家不只局限在自己做饭吃饭的情况,“去餐厅、“下馆子的频率已经越来越高.可是目前人们在餐厅吃饭点菜的形式
3、还只局限于效劳员人工点菜,不仅效率不高,菜品无法第一时间报给厨师,对菜品的选择也只局限于效劳员的推荐和自己个人的经验,而且吃饭只求味觉上的享受完全或者很少考虑到科学和身体的需要,现在,所谓的“吃饱吃好,从科学的角度来讲还只停留在吃饱的阶段,此种情况希望得到改善的要求十分迫切,也将成为餐厅的一大卖点.1.2 系统目标本系统立足于人们的饮食方面的需求,面向江西省南昌市连锁性质的“菜肴故事餐厅,对客人在餐厅内的点菜进行治理,本系统希望通过包间内电脑自主点菜的方式为客人提供点菜效劳,同时,本系统还可以根据客人的点菜记录为菜品打分,根据不同客人对菜品的爱好进行推荐,根据客人不同的身体情况提供配餐建议,以
4、实现点菜的科学化、系统化和自动化,最大限度的效劳于客人和餐厅,减少餐厅的开支,提升餐厅的效率,为顾客提供方便.1.3 业务需求及处理流程餐厅点菜的主要业务包括:所选菜单的生成和菜单处理的过程,如图1-1所示.图1-1点菜系统业务流程1.4 功能需求及数据分析需求功能需求分析将描述点菜系统提供的功能和效劳.根据对流程的分析,通过与餐厅效劳人员、顾客的交流,点菜系统主要功能和数据需求包括:后台菜品管理、顾客评价治理、前台点菜效劳.1.4.1 菜品根本信息治理提供菜品根本信息的录入、维护和查询功能:1工作人员录入、更新和删除菜品的根本信息,包括菜品的主要原料、所属菜系、价格、口味、热量,蛋白质含量等
5、信息.2菜品查询.系统提供多种方便快捷的方式进行菜品的检索,如可以输入指定的关键词进行查询,也可以通过设定菜品的条件,如口味、菜系等单一或者组合条件进行查询.1.4.2 顾客根本信息治理提供顾客的信息的录入、更新功能:1工作人员录入,删除,修改顾客的根本信息,包括顾客的姓名、生日、积分等信息.2工作人员可以对顾客信息进行查询.3系统对顾客的积分按消费情况进行自动修改.1.4.3 桌台根本信息治理提供桌台根本信息的录入、维护和查询功能:1工作人员录入桌台的根本信息,包括桌台编号,可容纳人数,等级,是否被占用.2工作人员更新、增加和删除桌台的根本信息.3工作人员可以根据桌台的编号对其进行查询.1.
6、4.4 科学套餐治理1工作人员负责录入科学套餐的信息,根据科学知识,将菜品根据不同人群的不同要求,进行组合形成科学套餐供顾客选择.2工作人员负责更新和删除套餐的根本信息.顾客可以根据编号,名称,功能对套餐的信息进行查询.1.4.5 菜单治理提供菜单的生成、确认、修改和查询的功能:1顾客菜单生成:所在房间顾客选择生成对应房间的菜单.2顾客选菜:顾客可以根据自己的口味、喜好、菜品价格进行选菜.顾客选定桌台之后,在终端机上开始选定菜品.顾客可以随意增加、删除和设定想要的数量,并最后统计价格.3菜单查询:顾客选菜结束后可以随时对所选菜单进行查询.4删除和改选:选菜成功后,顾客可以在未处理菜单前对菜单内
7、的菜品进行修改和删除.5菜单确认:本房间顾客自行确认菜单,确认后无法进行菜单修改.1.4.6 菜品推荐治理1同类菜品推荐.当顾客选择一道菜时,可以同时显示同类,口味相似菜品,向顾客显小.2自动菜品推荐.对顾客历史消费数据进行统计分析,针对顾客点菜风格及人数显示推荐菜品.3当季主打菜品推荐.向顾客推荐时下本店销量好的菜品.1.4.7 顾客评价治理该效劳应用于前台,操作对象为顾客.顾客可以根据自己意愿,对菜品进行评价.1菜品评价:顾客对菜品的评价,用文字描述,类似留言.2菜品打分:顾客根据对菜品的印象对菜品进行打分,10分制.1.5 系统功能图餐厅点菜系统功能图,如图1-2所示.图1-2餐厅点菜系
8、统功能图1.6 业务规那么分析业务规那么分析主要是分析数据之间的约束以及数据库约束.基于上述功能需求,通过进一步了解,点菜系统业务规那么如下:1每个桌台有唯一的编号,由餐厅提前分配.2每个菜品有唯一的编号标识,菜品编号由工作人员提前编排.3每个科学配菜套餐都有唯一编号,由系统提前分配.4对于已选择的套餐,顾客可以根据自己的需求可以调整菜单中的菜品.5每个选定好的菜单编号唯一标识.菜单编号由系统按时间和桌台号联合生成.6菜单被接受处理前,顾客可以调整菜品.但是如果已经开始接受处理那么不能修改.7同类菜品推荐规那么:根据顾客所点菜品的主要原料中有三样相同,口味相同,所属菜系相同,热量差距所点菜品的
9、15%以内,蛋白质含量差距所点菜品的20%以内的菜品,其中每满足以上一项条件菜品权值加1,选取权值前三大的菜品进行推荐,遇到已有菜品时自动排除.8自动菜品推荐规那么:根据历史记录直接生成一系列菜品,推荐规那么为选取往期所点菜品计算权值,计算规那么与同类菜品推荐规那么一样,然后从每样的权值前三大菜品中选取一样,遇到已有菜品时自动排除.9每个顾客有单独唯一的顾客编号,以及相应的消费积分,与等级分配.10每个顾客可以发表多条评价,一个职员可回复多条评价.11除前台以外的工作人员不能对产生的账单做任何操作.12顾客对于每个菜品的评价不能超过3条.13每条评价字数不得多于50.14顾客只能查看和更改自己
10、的评价.15顾客只能看到所有评价信息,不能更改其他桌台的信息.16一份账单只能享受一次顾客优惠,并按可允许的最高优惠计算.17每个桌台在同一时间最多只能有1个菜单.18每个菜单只能生成一个账单.19每张桌台的人数限制仅作参考.20顾客积分,等级及相应的折扣规那么如下:顾客等级积分条件享受折扣黄金会员4000积分=10009.5折一柏金会员10000积分=40009折钻石会员积分=100008.5折非会员积分1000无折扣21顾客积分为每消费一元折后金额积一分.22顾客积分为该顾客结账后统计.23无菜品的菜单不可生成账单.24当季主打菜品推荐为根据当日时间对菜品进行推荐,需人工设置推荐表,25主
11、打菜品推荐中每类菜品只推荐一个.26同类菜品推荐中每次只推荐最多3个菜品以供选择.27自动菜品推荐中,系统根据顾客历史点菜风格及消费人数进行菜品推荐,最多提供10个菜品以供选择.28系统假设查询不到顾客的历史点菜记录,便不可进行自动菜品推荐.29结账后的菜单和账单权限为只读,不可更改.30先结账,后进行顾客积分增加.因此,当次的顾客升级不可用于造成升级的账单打折,其折扣仍按升级前计算.31桌台等级分为1,2,3三个等级,3指外场,2指普通包厢,1指特级包厢32计算总价的方法:实际总价=菜单总价menuSum*会员折扣1.7数据约束分析点菜系统主要数据约束如下:1用户访问权限:任何用户都不能访问
12、其他用户的密码.2每个菜品的打分不能低于0,不能高于10.3菜品的编码规那么:以字母D开头加六位数字组成,数字是按流水号依次增大.4桌台的编号规那么:以字母T开头加三位数字组成,数字是按流水号依次增大.5顾客的编号规那么:以字母M开头加六位数字组成,数字是按流水号依次增大.6科学套餐的编号规那么:以字母S开头加六位数字组成,数字是按流水号依次增大.7菜单的编号规那么:以字母C开头加11位数字组成,其中前三位为桌台号中的数字,后八位为菜单创立时间.8账单的编号规那么:由系统在对应的菜单编号后自动加“B生成.9顾客积分初始值为0,最大为10000,到达此数值便不再增加.10顾客等级初始值为0,最大
13、为3,到达此数值便不再增加.1.8数据字典数据字典包括数据项描述、数据结构描述、数据流、数据存储和处理过程,具体内容如下.1.8.1 数据项与数据结构通过对所建立的表进行分析,我们得到了以下一些数据项,如表1.1至表1.5所示.表1.1菜品表Dishes数据项名与别名类型长度是否为空数据约束数据项含义说明dishesNOCharNotnullG字符加6个数字菜品编号dishesNamevarChar(20)Notnull字符菜品名称pricenumeric(7,2)Notnull数字菜品价格dishestypeCharnull字符菜品类型proteinnumeric(7,null数字蛋白质含量
14、2)calorificnumeric(7,2)null数字热量sugarsnumeric(7,2)null数字糖分表1.2桌台表Table数据名与别名类型长度是否为空数据约束数据项含义说明tableNoChar(4)NotnullT字符加3个数字桌口编?placeintNotnull数字容纳人数tablelevleChar(12)Notnull字符桌台等级表1.3顾客表Member数据项名与别名类型长度是否为空数据约束数据项含义说明memberNoChar(7)Notnull字符M加6个数字顾客编pmemberLevelChar(5)Notnull字符顾客等级memberCountintNot
15、null数字顾客积分memberNameChar(20)Notnull字符顾客名字memberSexChar(1)Notnull字符顾客性别memberBirthdatetimenull日期顾客生日表1.4科学套餐表Smeal数据项名与别名类型长度是否为空数据约束数据项含义说明smealNoCharNotnull以字母S开头加六位数字套餐编号sPricenumeric(7,2)Notnull数字套餐价格benefitvarChar(20)Notnull字符套餐功能表1.5菜单表Menu数据项名与别名类型长度是否为空数据约束数据项含义说明menuNoChar(12)Notnull以字母C开头加1
16、1位数字菜单编号menuDatedatetimeNotnull数字生成时间menuSumintNotnull数字菜单总价1.8.2数据处理为了实现预期的系统功能,我们建立了以下数据处理过程,如表1.12所示表1.12数据处理编号名称数据处理说明1.菜单编号生成建立一个触发器,实现菜单的编号由时间和桌台号自动生成.2.菜单总价计算建立一个存储过程,利用游标实现在客户点菜后,通过多点的菜品的价格,及与该菜品相对应的菜品的数量,计算出菜单的总价.3.菜品推荐建立一个存储过程,利用游标实现,查找菜品热量相差在20%蛋白质含量相差在15%范围内的菜品.4.计算客户积分建立一个存储过程,利用游标,通过查询
17、客户的消费记录,按消费额折合成积分,计入客户积分.5.菜单总价限制建立一个触发器,限制菜单总价不能人为操作限制,只能由明细表中计算得出.6.菜品评价限制建立一个触发器,限制客人只能修改自己对菜品的打分,对其他客户的打分只能查看.2数据库概念设计根据上述需求分析,可定义以下实体集、联系集及其属性.2.1 定义实体集及属性1菜品实体集Dishes:具有菜品编号dishesNo、菜品名称dishesNam©、价格price、菜品类型dishetype、蛋白质含量protein、热量calorific>糖分sugar§等属性.2桌台实体集Table:具有桌台编号tableNo
18、、容纳人数place、桌台等级level等属性.3顾客实体集Member:具有顾客编号memberNo、顾客等级memberLevel、顾客积分memberCount、顾客姓名memberNam8、顾客性别menberSe?、顾客生日memberbirth等属性.4科学套餐实体集Smeal:具有套餐号smealNo、套餐价格sPrice、套餐功能benefit等属性.5菜单实体集Menu:具有菜单编号menuNo、菜单总价menuSum等属性.2.2 定义联系集及属性1) Choice联系集:Member、TableDishes和Smeal之间的联系,其中Member和Table进行聚合,Di
19、shes和Smeal之间建立聚合.2) Combination联系集:Dishes和Smeal之间多对多的关系,一种菜品可以被多种套餐选择,一种套菜可以选择过个菜品.3) Create联系集:Menu和Choice联系集之间的联系,都用用聚合表示.4) Evaluate联系集:Member和Dishes之间多对多的关系,是对菜品的评价,具有分数score属性.2.3 E-R模型设计所有实体描述如下1菜品实体集如图2-1所示图2-1菜品实体集2桌台实体集如图2-2所示.3顾客实体集如图2-3所示4科学套餐实体集如图2-4所示5)菜单实体集如图2-5所示图2-5菜单实体集6)Evaluate联系集
20、如图2-6所示.图2-6Evaluate联系集7)Create联系集如图2-7所示图2-7Create联系集总体E-R图如以下图2-6所示.3逻辑设计Mtau*DutmitBill根据上述概念设计,将其转化为嗪绕诲以破别、支捋的关系数据模心3.1关系设计3.1.1由实体集转化而来的关系模式1)由Dishes实体集转化的关系模式为:Dishes(dishesNo,dishesName,price,dishestype,protein,calorific,suga归2)由Table实体集转化的关系模式为:Table(tableNo,tableNumber,tablelevel3)由Member实体
21、转化的关系模式为:Member(memberNo,memberLevel,memberCount,menberName,memberSex,memberBirth)4)由Smeal实体转化的关系模式为:Smeal(smealNo,sPrice,dishesNcbenefit)5)由Menu实体转化的关系模式为:Menu(menuNo,menuDate,tebleNo,menuSum)3.1.2由联系集转化而来的关系模式1)Evaluate联系集:Evaluate(roomNo,disheaNo,score2)由Create的联系集转化得到MenuDetail:MenuDetail(menuNo
22、,dishesNo,Price,qty)3)由Combination联系集转化为SmealDetail:SmealDetail(smealNo,dishesNodishesNo,price)3.2约束说明关系设计包括转换后所得的表,转换之后的关系如表3.1到3.10表3.1菜品表Dishes数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系dishesNOChar(7)NotnullG字符加6个数字菜品编号主键dishesNamevarChar(20)Notnull字符菜品名称与菜品号对应pricenumeric(7,2)Notnull数字菜品价格dishestypeCha
23、r(7)null字符菜品类型proteinnumeric(7,2)null数字蛋白质含量calorificnumeric(7,2)null数字热量sugarsnumeric(7,2)null数字糖分表3,2桌台表Table数据名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系tableNoChar(4)NotnullR字符加3个数字桌口编?主键placeintNotnull数字容纳人数levelintNotnull数字,1到3桌台等级emptyintNotnull数字是否占用表3,3顾客表Member数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系membe
24、rNoChar(7)Notnull字符M加6个数字顾客编P主键memberLevelChar(5)Notnull字符顾客等级memberCountintNotnull数字,0至I10000顾客积分memberNameChar(20)Notnull字符顾客名字memberSexChar(1)Notnull字符顾客性别memberBirthdatetimenull日期顾客生日表3,4科学套餐表Smeal数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系smealNoChar(7)Notnull以字母S开头加六位数字套餐编号主键sPricenumeric(7,2)Notnull数
25、字套餐价格由菜品价格计算得来,参照表DishesdishesNoChar(7)NotnullG字符加6个数字菜品编号dishesNObenefitvarChar(20)Notnull字符套餐功能表3.5菜单表Menu数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系menuNoChar(12)Notnull以字母C开头加11位数字菜单编号主键menuDatedatetimeNotnull数字时间tableNoChar(4)NotnullR字符加3个数字桌口编?外键,参照Table表menuSumintNotnull数字菜单总价由明细表中的菜品价格和菜品数量计算得出表3.6菜
26、单明细表MenuDetail数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系menuNoChar(12)Notnull以字母C开头加11位数字菜单编号主键、外键,参照Menu表dishesNoCharNotnullG字符加6个数字菜品编号主键、外键,参照Dishes表Pricenumeric(7,2)Not数字菜品价格与菜品对应qtyIntNotnull数字菜品数量表3.7科学套餐明细表SmealDetail数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系smealNoChar(12)Notnull有系统自动按时间提供科学套餐编号主键、外键,参照Me
27、nu表dishesNOCharNotnullG字符加6个数字菜品编号主键、外键,参照Dishes表Pricenumeric(7,2)Not数字菜品价格与菜品对应表3.8评价表Evaluate数据项名与别名类型长度是否为空数据约束数据项含义说明与其他数据项的联系tableNoChar(4)NotnullR字符加3个数字桌口编?主键、外键,参照RoomSdishesNOCharNotnullG字符加6个数字菜品编号主键、外键,参照Dishes表ScoreIntNotnull数字,0至I10分数函数依赖关系:1菜品表函数依赖集为F1=菜品编号一菜品名称,菜品价格,菜品类型,热量,蛋白质含量,糖分3N
28、R2桌台表函数依赖集为F2=桌台编号一容纳人数,桌台等级,是否占用3NR3顾客表函数依赖集为F3=顾客编号一顾客等级,顾客积分,顾客姓名,顾客性别,顾客生日C3NE4科学套餐表函数依赖集为F4=套餐编号一套餐价格,菜品编号,套餐功能3NF5科学套餐说明细表函数依赖集为F5=套餐编号一菜品编号£3NR6菜单表函数依赖集为F6=菜单编号一时间C3NE7菜单明细表函数依赖集为F7=菜单编号一菜品编号,菜品价格,实际菜品价格,菜品数量3NE8评价表函数依赖集为F10=桌台编号一菜品编号,分数3NR4数据库应用设计数据库应用的设计,包括数据库的脚本和平安性设计、数据库的完整性设计和数据库的存储
29、过程设计.4.1 数据库脚本及数据库平安性设计1数据库平安性设计创立三个用户分别为治理员user01'、前台效劳人员qiantai'以及顾客'customer',然后根据不同表的功能,赋予他们不同的权限,创立用户代码如下:/*addmyuser*/execsp_adduseruser01,user01execsp_addlogin'qiantai','123456','MenuDB1'execsp_adduser'qiantai','qiantai'execsp_addlogin
30、39;customer','123456','MenuDB1'execsp_adduser'customer','customer'2数据加脚本创立各个用户相关的表,并设计好各表间的主外键联系,规定好个用户的权限,治理员有所有的权限,前台人员对于菜单表只有查看的权限,而顾客对于菜单表有添加修改的作用,代码如下:print'creattableDishes'goCREATETABLEDishes(dishesNocharnotnulldishesNamevarchar(10)notnull,/*菜品编号*/p
31、ricenumeric(7,2)notnull,/*菜品价格*/caloricnumeric(7,2)notnull,/*热量*/sugersnumeric(7,2)notnull,/*糖分*/proteinnumeric(7,2)notnull,/*蛋白质*/*菜品编号*/check(dishesNolike'G0-90-90-90-90-90-9'),constraintDishesPKprimarykey(dishesNo)gograntallonDishestouser01goprint'createMember'gocreatetableMember(
32、memberNochar(7)notnull,/*顾客号*/check(memberNolike'C0-90-90-90-90-90-90-90-9'),memberNamevarchar(40)notnull,/*顾客姓名*/sexchar(1)notnull,/*性别*/memberLevelvarchar(12)notnull,/*顾客等级*/memberCountintnotnull,/*顾客积分*/birthdaydatetimenull,/*顾客生日*/constraintMemberPKprimarykey(memberNo)gograntallonMembert
33、ouser01goprint'createtableMenu'gocreatetableMenu(menuNochar(12)notnull,tableNocha4)notnull,memberNochar(7)notnull,/*菜单编号*/*桌台编号*/*顾客号*/check(memberNolike'C0-90-90-90-90-90-90-90-9'),meandatedatetimenotnull,/*时间*/meanSumnumeric(7,2)notnull,/*菜单总价*/constraintMenuPKprimarykey(menuNo),co
34、nstraintMenuFK1foreignkey(tableNo)referencesTable1(tableNo),constraintMenuFK2foreignkey(memberNo)referencesMember(memberNo)gograntallonTable1touser01goprint'createtableTable1'gocreatetableTable1(tableNochar(4)notnull,placeintnotnull,tableLevelchar(10)notnull,constraintTable1PKprimarykey(tabl
35、eNo)gograntallonTable1touser01goprint'createtableSmeal'gocreatetableSmeal(smealNochar(4)notnull,spricenumeric(7,2)notnull,constraintSmealPKprimarykey(SmealNo)gograntallonSmealtouser01goprint'createSmealDetail'gocreatetableSmealDetail(/*桌台编号*/*容纳人数*/*桌台级别*/*套餐编号*/*套餐价格*/*套餐编号*/smealNo
36、char(4)notnull,dishesNochar(7)notnull/*菜品编号*/check(dishesNolike'G0-90-90-90-90-90-9'),pricenumeric(7,2)notnull,/*菜品价格*/constraintSmealDetailPKprimarykeyclustered(smealNo,dishesNo),constraintSmealDetailFK1foreignkey(smealNo)referencesSmeal(smealNo),constraintSmealDetailFK2foreignkey(dishesNo)
37、referencesDishes(dishesNo)gograntallonSmealDetailtouser01goprint'createMenuDetail'gocreatetableMenuDetail(menuNochar(12)notnull,/*菜单编号*/dishesNochar(7)notnull/*菜品编号*/check(dishesNolike'G0-90-90-90-90-90-9'),pricenumeric(7,2)notnull,/*菜品价格*/quantityintnotnull,/*数量*/constraintMenuDetai
38、lPKprimarykeyclustered(menuNo,dishesNo),constraintMenuDetailFK1foreignkey(menuNo)referencesMenu(menuNo),constraintMenuDetailFK2foreignkey(dishesNo)referencesDishes(dishesNo)gograntallonMenudetailtouser01grantdelete,insertonMenuDetailtocustomergrantselectonMenuDetailtocustomer,qiantaigoprint'crea
39、tetableEvaluate'gocreatetableEvaluate(tableNochar(4)notnull,/*桌台编号*/dishesNochar(7)notnull/*菜品编号*/check(dishesNolike'G0-90-90-90-90-90-9'),scoreintnotnull,/*分数*/constraintEvaluatePKprimarykeyclustered(tableNo,dishesNo),constraintEvaluateFK1foreignkey(tableNo)referencesTable1(tableNo),con
40、straintEvaluateFK2foreignkey(dishesNo)referencesDishes(dishesNo)gograntallonEvaluatetouser01grantupdateonMenuDetailtocustomergrantselectonMenuDetailtocustomer,qiantaiGo4.2 数据库触发器设计根据具体的数据库要实现的功能,我们设计了相应的3个触发器,来实现数据库的完整性.1菜单编号的自动生成建立一个触发器,实现菜单的编号由时间和桌台号自动生成,代码如下所示.createtriggerMDmenuNoonMenuforinsert
41、asifexists(selecttablenofrominserted)begindeclaremenunochar(12),tablenochar(4)declarecur_menuscrollcursorforselecttablenofrominsertedopencur_menufetchnextfromcur_menuintotablenowhile(fetch_status=0)beginupdateMenusetMenuno=convert(char(8),getdate()+i.tablenofrominsertediwhereMenu.menuno=i.tablenofet
42、chnextfromcur_menuintotablenoendclosecur_menudeallocatecur_menuend2顾客评价的限制创立触发器,限定顾客只能对自己所在桌台的评价表进行修改,不能对其他顾客的评价表进行修改,代码如下所示.createtriggercustomerscoreonevaluateforupdateasifexists(select*fromdeleted)begindeclaretablenochar(4)declarecur_evaluatescrollcursorfor/*定义游标版踪顾客评价表中的桌台号*/selecttablenofromdel
43、etedopencur_evaluate/*丁开游标*/begintran/*事务开始*/fetchnextfromcur_evaluateintotablenowhile(fetch_status=0)/*判断如果提取成功*/begin/*修改评价表中的分数*/updateevaluatesetscore=score-i.score+d.scorefrominsertedd,deletediwheretable1.tableno=i.tablenoandi.tableno=d.tablenoandtable1.tableno=tablenofetchnextfromcur_evaluatei
44、ntotablenoendcommittran/*事务提交*/closecur_evaluate/关闭游标*/deallocatecur_evaluate/释放游标*/end3)菜单价格的治理当菜单中的菜品改变是,菜单价格根据改变的菜品进行更新,代码如下所示createtriggerupdatesaleitemonMenuDetailforupdateasifupdate(quantity)orupdate(dishesNo)begindeclaremenuNochar(12)declarecur_menudetailscrollcursorforselectmenuNo,dishesNofr
45、omdeletedopencur_menudetailbegintranfetchnextfromcur_menudetailintomenuNowhile(fetch_status=0)beginupdateMenusetmeansum=meansum-d.quantity*d.price+i.quantity*i.pricefrominsertedi,deleteddwhereMenu.menuNo=i.menuNoandi.menuno=d.menuNoandMenu.menuno=menunofetchnextfromcur_menudetailintomenuNoendcommitt
46、ranclosecur_menudetaildeallocatecur_mendetailend4.3 数据库存储过程的设计根据数据库应用的需求,设计3个存储过剩.1)菜品推荐根据顾客已经选择的菜品的热量和营养价值,我们自菜品表中选择出热量相差不大于15%以及蛋白质含量在20%以内的的菜品,代码如下所示.createprocedurep_tuijianasbegindeclarecaloricnumeric(7,2),proteinnumeric(7,2),dishesnochardeclarecur_tuijianscrollcursorforselectdishesno,caloric,p
47、roteinfrommenudetaila,dishesbwherea.dishesno=b.dishesnoopencur_tuijianfetchnextfromcur_tuijianintodishesno,caloric,proteinwhile(fetch_status=0)beginselectdishesno,dishesnamefromdisheswherecaloric>=0.85*caloricandcaloric<=1.15*caloricandprotein>=0.8*proteinandprotein<=1.2*proteinfetchnext
48、fromcur_tuijianintodishesno,caloric,proteinendclosecur_tuijiandeallocatecur_tuijianend2)菜单总价计算建立存储过程,实现菜单的总价根据菜单明细表中的数据计算得出,代码如下所示.createprocedurep_menusmasbegindeclaremenunochar(12)declarecur_menusumscrollcursorforselectmenuNofrommenudetailopencur_menusumfetchnextfromcur_menusumintomenunowhile(fetc
49、h_status=0)beginupdatemenusetmenusum=menudetail.quantity*menudetail.pricefrommenudetailawherea.menuno=menunofetchnextfromcur_menusumintomenunoendclosecur_menusumdeallocatecur_menusumEnd3)计算客户的积分建立存储过程,根据顾客的菜单总价计客户的积分数,代码如下所示.createprocedurep_scoreasbegindeclaremenusumnumeric(7,2),membernochar,menuno
50、char(12)declarecur_scorecursorforselectmenusum,membernofrommenuopencur_scorefetchnextfromcur_scoreintomenusum,memberno,menunowhile(fetch_status=0)beginupdatemembersetmembercount=membercount+convert(int,menusum)frommembera,menubwherea.memberno=membernoandb.menuno=menunofetchnextfromcur_scoreintomenus
51、um,memberno,menunoendclosecur_scoredeallocatecur_scoreend5物理设计5.1 关系模式存储方式选择为提升数据库数据的存取速度,而需要设置适宜的存取方式,主要采用以下两类存取方式.5.1.1 索引存取方式,主要采用B+树索引方法1)菜品表(Dishes)的数据量很大,而且其中大多数的数据都会经常在查询中用到,所以根据它的特点建立索引.2)顾客表(Member中的积分(memberCount以及菜单表(Menij)中的总价(menuSum经常在连接中出现,所以建立B+W索引.5.1.2 聚簇索引方式除特殊说明的表外,在其余各表主键上默认地建立聚
52、簇索引.5.2 数据库的存储结构为了提升系统整体性能,将数据库中的数据组织分为多个文件,分开进行存储.5.2.1 数据库的存放位置数据库中的数据组织一个primary文件进行存储.5.2.2 数据库的存放路径在目前实验条件下,根据实验的实际需求,将各数据文件存储在以下路径中.setnocountonsetdateformatymdusemastergoifnotexists(select*fromsysloginswherename='user01')execsp_addloginuser01,user01go/*createdatabase*/ifexists(select*fromsysdatabaseswherename='OrderDB81')dropdatabaseMenuDB1gocreatedatabaseMenuDB1onprimary(name='MenuDB1','f:myWorkMenuDB1.mdf,size=1,maxsize=5,)logon(name='MenuDB1Lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版九年级数学上册21.3.1《一元二次方程的根与系数的关系》听评课记录
- 2025年便携式X荧光光谱分析仪合作协议书
- 七年级第二学期工作总结
- 苏科版数学七年级下册8.1.1《同底数幂的乘法》听评课记录
- 公司职工食堂承包协议书范本
- 装饰装修劳务分包合同范本
- 2025年度新能源电站租赁诚意金合同
- 2025年度装修施工现场安全监督合同
- 二零二五年度航空航天设备采购合同知识产权保护及实施约定
- 2025年度航空航天零部件购买协议范文汇编
- GB/T 7251.5-2017低压成套开关设备和控制设备第5部分:公用电网电力配电成套设备
- 2023年湖南高速铁路职业技术学院高职单招(数学)试题库含答案解析
- 中考语文非连续性文本阅读10篇专项练习及答案
- 勇者斗恶龙9(DQ9)全任务攻略
- 经颅磁刺激的基础知识及临床应用参考教学课件
- 小学语文人教四年级上册第四单元群文阅读“神话故事之人物形象”PPT
- 乡村振兴汇报课件
- 红色记忆模板课件
- ISO 31000-2018 风险管理标准-中文版
- 油气藏类型、典型的相图特征和识别实例
- 丽声三叶草分级读物第四级A Friend for Little White Rabbit课件
评论
0/150
提交评论