文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

点餐系统数据库设计--SQL Server

2023-12-23 21:24

关注

目录

友情链接

1、学生成绩管理系统数据库设计–MySQL

学生成绩管理系统数据库设计–MySQL

2、医疗信息管理系统数据库–MySQL

医疗信息管理系统数据库–MySQL

3、邮件管理数据库设计–MySQL

邮件管理数据库设计–MySQL

4、商品管理系统数据库设计–SQL Server

商品管理系统数据库设计–SQL Server

5、SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

SQL Server医疗信息管理系统数据库【英文版-源码】–(Medical Management System Database)

6、SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

SQL Server电影院数据库管理系统【英文版-源码】–(Movie Theatre Management System Database)

一、需求分析

1.选题背景

随着经济不断发展,餐饮行业也随着物质生活水平逐步提高而迅速发展,人们对生活质量的要求也越来越高,享受真正自动化、人性化的服务成为了人们追求高质量生活的重要内容。在大多数的餐饮场所点菜、查看菜谱等是人工完成的,速度慢,效率低,极易出错,造成人力物力的极大浪费。然而随着我国市场经济的快速发展,餐厅点菜系统成为餐厅提升服务档次,提高办公效率,提高竞争力的关键因素之餐饮业要想跟上发展形势,餐馆点餐的信息化进程也要加快脚步。

2.系统功能

2.1 查询菜单功能

顾客可以根据所有餐厅的菜单信息,数据菜单的相关信息例如通过菜品的菜系查找对应菜系的菜品,也可以通过菜品类型查询相应的菜品,也可以根据价格范围来查询目标菜品,由餐厅管理者维护菜品信息。

2.2 菜品折扣功能

餐厅菜品一定程度上有折扣,可定期或者集中维护,顾客也可以通过折扣情况来选择菜品。

2.3 点餐功能

顾客进店后可根据菜单点相应的菜品,可以记录顾客点餐的份数和对应的口味需求,顾客也可以更改自己的点餐信息。餐厅管理者也可以查看菜品受欢迎程度以及对顾客口味进行分析。

2.4 餐桌和顾客信息

餐桌为顾客提供用餐位置,需要实时更新当前餐桌状态(空闲,就餐),不同餐桌提供的座位数不同。顾客是进店顾客相关信息,两个表都有管理员来维护,每一个顾客id对应一起进餐厅的顾客,人数不限,同时需要指定顾客的就餐桌号。

2.5 顾客实时状态维护

为了餐厅管理者更好维护餐厅就餐情况,为餐厅设计顾客状态表数据,可以数据顾客查询顾客当前状态。

2.6 顾客排队功能

顾客进入餐厅,如果满员需要一定时间等待,根据人数排队不同的桌位人数的排队。

2.7 结算功能

顾客就餐完成,完成结款,可以通过顾客编号,餐桌号,点单编号等信息查询到顾客的消费情况。每天的销售统计,套餐和单点的销售情况,实现对本店总体销售情况的统计。

3.用户需求分析

餐厅管理系统的总目标是为用户提供迅速、高效的服务,减免手工处理的繁琐与误差,及时、准确地反映餐厅的工作情况、经营情况,从而提高餐厅的服务质量,获得更好的经济效益。其具体目标包括:
1)快速完成顾客的点餐。
2)准确无误地记录顾客的每笔消费记录。
3)实时、快速、准确地提供最新餐单。
4)方便查询顾客消费情况。
5)实现顾客排队功能。
顾客:顾客进店首先选择位置,拿到菜单进行点餐 。
菜品:供顾客选择,可由收银员(店员)维护、更新、删除、新增菜品,菜品编号,可提供菜系、价格和菜品类型供筛选,价格由最初店员设置,可通过折扣或者信息更新变更价格。
点菜单:顾客进店后进行点单,点菜单编号不唯一,同一桌同一批顾客存在点不同菜品的可能,顾客可自行选择口味,顾客可以根据需求取消点单或者增加点单。
顾客状态:体现顾客状态。
优惠信息:包括菜品编号和对应折扣,由店员更新,针对不同菜品折扣不同,店员可根据时令和物价进行更新,折扣范围是0-1。
收银单:统计点菜单顾客实际应付款项和对应折扣后实际应付款,计入收款时间,方便店员计算账目,可由店员维护。
店员:快餐店维护者,数据库主要使用人和维护人,主要维护菜品信息和菜品对应折扣,完成收款和账目统计等。
排队表,用于体现顾客排队情况,根据顾客人数等待餐桌不同。

4.数据字典

数据字典是关于数据的信息的集合,也是对数据流图中所包含的所有元素的定义的集合。
由于本次是小型数据库系统的开发,所以采用卡片形式书写数据字典。每张卡片上保存描述一个数据的信息。这样做更新和修改起来比较方便,而且能单独处理描述每个数据的信息。
下面列出若干数据元素的数据卡片信息。
在这里插入图片描述

在这里插入图片描述

5.数据流图

在这里插入图片描述

二、数据概念结构

1.数据结构

在这里插入图片描述

概念结构设计是将分析得到的用户需求抽象为概念模型的过程,即在需求分析的基础上,设计出能够满足用户需求的各种实体以及它们之间的相互关系的模型。概念结构的主要特点是能真实、充分地反映现实世界,易于理解,易于更改,易于向关系、网状、层次等各种数据模型转换,描述概念模型的有力工具是E-R模型。

2.ER图

2.1局部ER图

(1)顾客信息E-R图
在这里插入图片描述

(2)餐桌E-R图
在这里插入图片描述

(3)顾客状态E-R图
在这里插入图片描述

(4)菜品E-R图
在这里插入图片描述

(5)点菜单E-R图
在这里插入图片描述

(6)优惠信息E-R图
在这里插入图片描述

(7)收银员E-R图
在这里插入图片描述

(8)收银单E-R图
在这里插入图片描述

(8)排队表E-R图

在这里插入图片描述

2.2 全局ER图

在这里插入图片描述

三、逻辑结构设计

逻辑结构设计的任务就是把概念模型结构转换成某个具体的DBMS所支持的数据模型。设计逻辑结构时,首先是将概念结构转换为一般的关系、网状、层次模型,其次是将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换,最后是对数据模型进行优化。
将餐饮点菜系统的E-R图转换成关系数据模型。关系模式如下:

1.实体

顾客:属性有顾客编号、桌号、用餐人数、进店时间
餐桌:属性有餐桌编号、容量、状态(空闲、就餐)
顾客状态:顾客编号、时间、状态(就餐、等待、结款)
菜品:属性有菜品编号、菜品名称、菜品分类、所属菜系、价格、原材料
点菜单:属性有点菜单编号、顾客编号、菜品编号、份数、口味
优惠信息:属性有菜品编号、折扣
收银员:属性有收银员编号、姓名、联系方式
收银单:属性有收银单编号、收银员编号、顾客编号、餐桌编号、应收金额、折扣、实收金额、收银时间
排队表:属性有顾客编号,顾客人数,对应需要餐桌人数

2.实体间联系

一桌顾客对应一个菜单,多桌客人可以使用相同的菜单,因此顾客与菜单有多对一的联系。
客人、收银单之间存在一对一的关系,即一桌客人只对应一个收银单
点菜单和菜品之间存在一对多联系,一个菜单可对应多个菜品
菜品和折扣存在一对一联系,一个菜品对应一种折扣
顾客和顾客状态存在一对多联系,一个顾客对应多种客户状态
排队表顾客与顾客存在一对一关系

四、物理结构设计

数据库的物理结构设计是对于给定的逻辑数据模型,选取一个最合适应用环境的物理结构。数据库的物理结构指的是数据库在物理设备上的存储结构与存取方法,它依赖于给定的计算机系统,是在数据库逻辑结构的基础上设计出一组能够满足实际需求的关系、约束、和索引等信息。餐厅点菜系统的数据库表结构如下:

4.1 顾客CustomerInfo

在这里插入图片描述

4.2 菜品信息FoodInfo

在这里插入图片描述

4.3 优惠信息DiscountInfo

在这里插入图片描述

4.4 点菜单OrderInfo

在这里插入图片描述

4.5 店员信息ManagerInfo

在这里插入图片描述

4.6 顾客状态实时表ManagerInfo

在这里插入图片描述

4.7 收银单ChargeInfo

在这里插入图片描述

4.8 顾客排队表Queue

在这里插入图片描述

五、数据库构建

1.建表语句

1.1 创建数据库

create database restaurant on primary(name='restaurant',filename='D:\database\restaurant.mdf',size=5MB,maxsize=100MB,filegrowth=15%)Log on(name='restaurant_log',filename='D:\database\restaurant.ldf',size=5MB,maxsize=100MB,filegrowth=15%)GOuse restaurant;

1.2 创建表

-- 餐桌表create table TableInfo(Table_Id int primary key not null,Table_Num    int not null,Table_Status char(10) not null);-- 顾客表create table CustomerInfo(Cus_Id  int primary key not null,Table_Id  int not null,Cus_num  int not null,Intime  datetime not null);-- 收银员表create table CashierInfo(Cash_Id   int primary key not null,Cash_Name varchar(25) not null,Tel       char(11) not null);-- 菜品表create table FoodInfo(Food_Id  int primary key not null,Food_Name varchar(25) not null,Cuisine   varchar(10) not null,Food_Type varchar(4) not null,Price     money);-- 菜品折扣表create table DiscountInfo(Food_Id   int primary key not null,Food_Name varchar(25) not null,Discount  float not null check(Discount<=1) --折扣小于等于1);--点菜单表create table OrderInfo(Order_Id int not null,Cus_Id   int not null,Food_Id  int not null,Food_Num int not null,Ftaste   varchar(25) check (Ftaste in ('甜','咸','酸')),Primary Key (Order_Id,Food_Id));-- 收银表create table ChargeInfo(Charg_Id int identity(1,1) primary key not null,Cash_Id  int not null,Cus_Id   int not null,Table_Id int not null,Spay     money not null,Discount float not null,Rpay     money not null,Pay_time datetime not null);-- 顾客状态实时表create table CuststatusInfo(Cus_Id        int not null,iTime         datetime not null,Cus_Status    char(10) not null,Primary Key (Cus_Id,Cus_Status));-- 顾客排队表create table Queue(Cus_Id        int primary key not null,Cus_num       int not null,Table_Num     int not null);

1.3 添加外键约束

--折扣菜品菜品id是菜品表菜品id的外键alter table CustomerInfoadd constraint fk_Tab_Cu foreign key(Table_Id) references TableInfo(Table_Id);--折扣菜品菜品id是菜品表菜品id的外键alter table DiscountInfoadd constraint fk_Dis_Fo foreign key(Food_Id) references FoodInfo(Food_Id);--点菜单的菜品id是菜品表菜品id的外键,顾客id是顾客表顾客id的外键alter table OrderInfoadd constraint fk_Or_Fo foreign key(Food_Id) references FoodInfo(Food_Id);alter table OrderInfoadd constraint fk_Or_Cus foreign key(Cus_Id) references CustomerInfo(Cus_Id)--收银单的顾客id是顾客表顾客id的外键,收银员id是收银员表收银员编号的外键,用餐餐桌id是餐桌表餐桌id的外键alter table ChargeInfoadd constraint fk_Cu_Cha foreign key(Cus_Id) references CustomerInfo(Cus_Id);alter table ChargeInfoadd constraint fk_Ca_Cha foreign key(Cash_Id) references CashierInfo(Cash_Id);alter table ChargeInfoadd constraint fk_Tab_Cha foreign key(Table_Id) references TableInfo(Table_Id);--顾客状态实时表的顾客id是顾客表顾客id的外键alter table CuststatusInfoadd constraint fk_Ch_sta foreign key(Cus_Id) references CustomerInfo(Cus_Id)--顾客排队表的顾客id是顾客表顾客id的外键alter table Queueadd constraint fk_Qu_sta foreign key(Cus_Id) references CustomerInfo(Cus_Id)

2.插入数据

--餐桌插入数据insert into TableInfo values(1,2,'空闲');insert into TableInfo values(2,2,'就餐');insert into TableInfo values(3,4,'空闲');insert into TableInfo values(4,4,'就餐');insert into TableInfo values(5,4,'空闲');insert into TableInfo values(6,4,'就餐');insert into TableInfo values(7,2,'就餐');insert into TableInfo values(8,2,'就餐');insert into TableInfo values(9,6,'就餐');insert into TableInfo values(10,8,'空闲');--顾客插入数据insert into CustomerInfo values(1001,2,1,'2019-11-19 08:21:56');insert into CustomerInfo values(1002,3,6,'2019-11-19 08:26:01');insert into CustomerInfo values(1003,1,1,'2019-11-19 09:00:54');insert into CustomerInfo values(1004,2,2,'2019-11-19 10:32:23');insert into CustomerInfo values(1005,2,2,'2019-11-19 12:52:31');insert into CustomerInfo values(1006,1,1,'2019-11-19 18:21:20');insert into CustomerInfo values(1007,3,3,'2019-11-19 19:02:01');insert into CustomerInfo values(1008,4,6,'2019-11-19 19:21:54');insert into CustomerInfo values(1009,5,10,'2019-11-19 20:15:23');insert into CustomerInfo values(1010,2,5,'2019-11-19 20:52:35');--收银员插入数据insert into CashierInfo values(1,'王娜','13688886661');insert into CashierInfo values(2,'李英杰','13688886662');insert into CashierInfo values(3,'赵颖','13688886663');--菜品插入数据insert into FoodInfo values(1001,'炖酸菜','东北菜','炖菜',35);insert into FoodInfo values(1002,'拌拉皮','东北菜','凉菜',15);insert into FoodInfo values(1003,'酱骨头','东北菜','酱菜',48);insert into FoodInfo values(1004,'炒西红柿鸡蛋','东北菜','炒菜',18);insert into FoodInfo values(1005,'炒土豆丝','东北菜','炒菜',12);insert into FoodInfo values(1006,'猪肉粉丝','东北菜','炖菜',45);insert into FoodInfo values(1007,'花童鸡','江浙菜','炖菜',50);insert into FoodInfo values(1008,'扬州狮子头','江浙菜','蒸菜',46);insert into FoodInfo values(1009,'海带汤','江浙菜','汤',18);insert into FoodInfo values(1010,'肉丝烧茄子','陕西菜','炒菜',25);--菜品折扣插入数据insert into DiscountInfo values(1001,'炖酸菜',0.9);insert into DiscountInfo values(1002,'拌拉皮',0.85);insert into DiscountInfo values(1003,'酱骨头',0.9);insert into DiscountInfo values(1004,'炒西红柿鸡蛋',0.8);insert into DiscountInfo values(1005,'炒土豆丝',0.8);insert into DiscountInfo values(1006,'猪肉粉丝',0.9);insert into DiscountInfo values(1007,'花童鸡',0.85);insert into DiscountInfo values(1008,'扬州狮子头',0.9);insert into DiscountInfo values(1009,'海带汤',0.8);insert into DiscountInfo values(1010,'肉丝烧茄子',0.8);--点菜单插入数据insert into OrderInfo values(1,1001,1003,1,'甜');insert into OrderInfo values(2,1002,1001,2,'甜');insert into OrderInfo values(2,1002,1002,2,'咸');insert into OrderInfo values(3,1003,1004,1,'甜');insert into OrderInfo values(4,1004,1002,1,'酸');insert into OrderInfo values(5,1005,1002,2,'甜');insert into OrderInfo values(6,1006,1003,1,'甜');insert into OrderInfo values(7,1007,1001,1,'甜');insert into OrderInfo values(8,1008,1002,2,'咸');insert into OrderInfo values(8,1008,1004,1,'甜');insert into OrderInfo values(9,1009,1002,1,'酸');insert into OrderInfo values(9,1009,1003,2,'甜');--结算单表插入数据insert into ChargeInfo (Cash_Id,Cus_Id,Table_Id,Spay,Discount,Rpay,Pay_time) values(1,1005,2,50,0.9,45,'2019-11-19 12:52:31');insert into ChargeInfo (Cash_Id,Cus_Id,Table_Id,Spay,Discount,Rpay,Pay_time) values(2,1003,5,100,0.85,85,'2019-11-20 18:21:01');insert into ChargeInfo (Cash_Id,Cus_Id,Table_Id,Spay,Discount,Rpay,Pay_time) values(1,1002,3,60,0.8,48,'2019-11-19 20:52:22');--顾客状态插入数据insert into CuststatusInfo values(1001,'2019-11-20 21:18:25','等待');insert into CuststatusInfo values(1002,'2019-11-19 12:51:21','等待');insert into CuststatusInfo values(1002,'2019-11-19 12:55:55','就餐');--顾客排队表插入数据insert into Queue values(1001,2,2);insert into Queue values(1002,3,4);insert into Queue values(1003,1,2);

3.索引

--建立索引CREATE INDEX Index_ Cash_Name ON CashierInfo (Cash_Name asc);CREATE INDEX Index_ Food_Name ON FoodInfo (Food_Name asc);

4.查询

select     FoodInfo.Food_id as 菜品编号,    FoodInfo.Food_name as 菜品名称,    Food_Type as 菜品类型,    FoodInfo.Cuisine AS 菜品菜系,    Price as 价格,    DiscountInfo.Discount as 折扣from FoodInfo inner join DiscountInfoon FoodInfo.Food_id=DiscountInfo.Food_id;

在这里插入图片描述

select     Food_Type as 食品类型,    count(distinct Food_id) as 数量from FoodInfo group by Food_Type

在这里插入图片描述

5.触发器

5.1 增加数据库触发器

点菜单产生一个数据自动传入收银单数据中,增加表OrderInfo,触发表ChargeInfo
在这里插入图片描述

5.2 增触发器

新增客户自动默认排队,默认排队数桌人数为,后期可以修改,插入表CustomerInfo,触发表Queue
在这里插入图片描述

5.3 删触发器

删除不在参与排队的客户信息,即删除排队表中的客户信息,删除表CustomerInfo,触发表Queue
在这里插入图片描述

5.4 update触发器

更改客户人数,对应的排队人数也更新,更新CustomerInfo,触发CustomerInfo
在这里插入图片描述

6.存储过程

6.1 新增存储过程

新增顾客存储过程
在这里插入图片描述

6.2 变更存储过程

调节食品价格存储过程
在这里插入图片描述

6.3 删除存储过程

根据顾客id删除顾客排队存储过程
在这里插入图片描述

6.4 查询存储过程一

根据菜品类型查询快餐厅目前食品清单存储过程,默认主食
在这里插入图片描述

6.5 查询存储过程二

根据客户id查询排队状态存储过程
在这里插入图片描述

6.6 查询存储过程三

根据食物口味查询订单存储过程
在这里插入图片描述

7.视图

7.1 菜品种类分布

在这里插入图片描述

7.2 建立视图,查看菜品及折扣情况

在这里插入图片描述

测试
在这里插入图片描述

8.自定义函数

8.1 输入收银员编号,返回收银员姓名

在这里插入图片描述

测试
在这里插入图片描述

8.2 建立自定义函数,输入食物名称,返回对应食物所属菜系

在这里插入图片描述

9.游标

显示有折扣的菜品信息
在这里插入图片描述

来源地址:https://blog.csdn.net/Artificial_idiots/article/details/122960029

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯