一、实验目的与要求1、通过实验加深对数据完整性的理解,学会创建和使用触发器。2、通过实验加深对数据安全性的理解,并掌握SQLServer中有关用户,角色及操作权限的管理方法。3、通过实验了解SQLServer的数据备份和恢复机制,掌握SQLServer中数据库备份和恢复的方法。4、根据数据库系统设计的基本步骤,完成某一具体数据库系统的需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库运行维护等功能。二、设计思想数据库系统设计是指对于一个给定的应用环境,构造优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据库操作要求。数据库设计的基本步骤包括需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库运行和维护。三、设计步骤一、需求分析餐厅管理涉及的实体有:客人属性有客人编号、桌号、人数、到达时间、客人类型菜单属性有菜单编号、菜肴编号、份数、口味菜肴属性有菜名、菜肴种类收银单属性有收银单编号、应收金额、折扣、实收金额、收银时间账目属性有帐目编号、消费金额、用餐持续时间、客户类型这些实体之间的联系如下:一桌客人对应一个菜单,多桌客人可以使用相同的菜单,因此客人与菜单有多对一的联系。客人、收银单、账目之间存在一对一的关系,即一桌客人只对应一个收银单,一个收银单只对应一条账目记录,一个收银单只对应一桌客人。菜肴和菜单之间存在一对一联系,一个菜肴编号对应一个菜名,用菜价来表示菜肴的价格。二、概念结构设计客人客人编号桌号人数客人类型12菜单口味份数菜肴编号菜单编号收银单收银单编号应收金额折扣实收金额账目账目编号消费金额客户类型菜肴菜肴菜肴种类3三、逻辑结构设计总体表预览表名称表信息描述CustomerInfo客人信息表FoodList菜单信息表FoodInfo菜肴信息表ChargeInfo收银信息表AccountInfo账目信息表OrderInfo点菜信息表C_C_A客人、收银单、账目对应关系PriceInfo价格信息表客人客人编号桌号人数客人类型菜单口味份数菜肴编号菜单编号点菜收银单收银单编号应收金额折扣实收金额账目账目编号消费金额客户类型对应菜肴菜肴菜肴种类价格菜价111n1114客人信息表CustomerInfo描述字段类型客人编号CusnoInt桌号Tablenoshortint人数Cusnumshortint客人类型Ctypechar(4)菜单信息表FoodList描述字段类型菜单编号MnoInt菜肴编号Fnosmallint份数Fnumsmalltint口味FtasteChar(4)菜肴信息表FoodInfo描述字段类型菜名Fnamevarchar(20)菜肴种类Fkindchar(4)收银信息表ChargeInfo5描述字段类型收银单编号ChargenoInt应收金额Spayint折扣Discountint实收金额Rpayint账目信息表AccountInfo描述字段类型账目编号AccountnoInt消费金额PayInt客户类型Ctypechar(4)点菜信息表OrderInfo描述字段类型客人编号CusnoInt菜单编号MnoInt客人、收银单、账目对应关系表C_C_A描述字段类型6客人编号CusnoInt收银单编号ChargenoInt账目编号AcountnoInt价格信息表PriceInfo描述字段类型菜名Fnamevarchar(20)菜肴编号Fnosmallint价格Pricesmallint创建数据库:createdatabaseinn;创建表:创建表CustomerInfo:createtableCustomerInfo(Cusnointprimarykey,Tablenosmallintnotnull,Cusnumsmallintnotnull,Custypechar(4)notnull,check(Custype='普通'orCustype='VIP'),);7创建表FoodInfo:createtableFoodInfo(Fnamevarchar(20)primarykey,Fkindchar(10)notnull,);创建表ChargeInfo:createtableChargeInfo(Chargenointprimarykey,Spayint,Discountint,Rpayint);创建表AccountInfo:createtableAccountInfo(Accountnointprimarykey,Payint,Ctypechar(4));创建表C_C_A:createtableC_C_A(Cusnointprimarykey,Chargenointnotnull,8Accountnointnotnull);创建表PriceInfo:createtablePriceInfo(Fnosmallintprimarykey,Fnamevarchar(20)notnull,Pricesmallintnotnull);创建表FoodList:createtableFoodList(Mnoint,Fnosmallint,Fnumsmallintnotnull,Ftastechar(4),primarykey(Mno,Fno),foreignkey(Fno)referencesPriceInfo(Fno));创建表OrderInfo:createtableOrderInfo(Cusnoint,Mnoint,primarykey(Cusno,Mno),9foreignkey(Cusno)referencesCustomerInfo(Cusno));四、物理结构设计创建索引:createindexindex_PriceInfoonPriceInfo(Fno);createindexindex_FoodListonFoodList(Mno);createindexindex_OrderInfoonOrderInfo(Mno);createindexindex_FoodInfoonFoodInfo(Fname);createindexindex_CustomerInfoonCustomerInfo(Cusno);createindexindex_ChargeInfoonChargeInfo(Chargeno);createindexindex_C_C_AonC_C_A(Cusno);createindexindex_AccountInfoonAccountInfo(Accountno);创建视图:createviewKitchenasselectMno,Fname,Fnum,FtastefromFoodList,PriceInfocreateviewDeliveryasselectTableno,Fname,Fnum,CusnumfromFoodList,CustomerInfo,OrderInfo,PriceInfo10whereFoodList.Mno=OrderInfo.MnoandOrderInfo.Cusno=CustomerInfo.CusnoandPriceInfo.Fno=FoodList.Fno五、数据库实施1、插入数据:插入数据到表FoodInfo:insertintoFoodInfovalues('干锅千页豆腐','推荐');insertintoFoodInfovalues('手撕包菜','素菜');insertintoFoodInfovalues('水煮鱼片','荤菜');insertintoFoodInfovalues('香干回锅肉','荤菜');insertintoFoodInfovalues('油淋茄子','素菜');insertintoFoodInfovalues('蒜苗牛柳','推荐');insertintoFoodInfovalues('鱼香肉丝','荤菜');insertintoFoodInfovalues('糖醋小排','推荐');insertintoFoodInfovalues('酸辣土豆丝','素菜');insertintoFoodInfovalues('宫爆鸡丁','荤菜');insertintoFoodInfovalues('红烧鸡块','荤菜');insertintoFoodInfovalues('冬瓜咸排汤','汤类');insertintoFoodInfovalues('蕃茄蛋汤','汤类');insertintoFoodInfovalues('紫菜蛋汤','汤类');insertintoFoodInfovalues('土豆牛肉','推荐');insertintoFoodInfovalues('凉拌皮蛋','凉菜');insertintoFoodInfovalues('凉拌毛豆','凉菜');11插入数据到表PriceInfo:insertintoPriceInfovalues(001,'干锅千页豆腐',16);insertintoPriceInfovalues(002,'手撕包菜',6);insertintoPriceInfovalues(003,'水煮鱼片',15);insertintoPriceInfovalues(004,'香干回锅肉',10);insertintoPriceInfovalues(005,'油淋茄子',6);insertintoPriceInfovalues(006,'蒜苗牛柳',18);insertintoPriceInfovalues(007,'鱼香肉丝',10);insertintoPriceInfovalues(008,'糖醋小排',22);insertintoPriceInfovalues(009,'酸辣土豆丝',5);insertintoPriceInfovalues(010,'宫爆鸡丁',12);insertintoPriceInfovalues(011,'红烧鸡块',16);insertintoPriceInfovalues(012,'冬瓜咸排汤',8);insertintoPriceInfovalues(013,'蕃茄蛋汤',6);insertintoPriceInfovalues(014,'紫菜蛋汤',6);insertintoPriceInfovalues(015,'土豆牛肉',24);insertintoPriceInfovalues(016,'凉拌皮蛋',5);insertintoPriceInfovalues(017,'凉拌毛豆',5);2、创建用户、角色创建用户:选择目的数据库中的安全性,右击安全性中的用户,选择新建用户,在弹出的数据库用户-新建对话框中输入用户名和登录名Delivery,单击确定。重复上述操作完成对用户Kitchen、Admin、Waiter的创建。创建角色:选择目的数据库中的安全性,右击安全性中的角色,选择新建中的新建数据库角色,出现数据库角色-新建对话框,输入角色名,并选择所有者,在此角12色的成员中单击添加选择角色成员,单击确定完成角色创建。3、对用户授权grantselectonKitchentoKitchen;grantupdateonFoodListtoKitchen;grantselectonDeliverytoDelivery;grantupdateonFoodListtoDelivery;grantallprivilegesonAccountInfotoAdmingrantallprivilegesonC_C_AtoAdmingrantallprivilegesonChargeInfotoAdmingrantallprivilegesonCustomerInfotoAdmingrantallprivilegesonFoodInfotoAdmingrantallprivilegesonFoodListtoAdmingrantallprivi