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

1195 0
Honkers 2025-3-7 14:50:38 | 显示全部楼层 |阅读模式

友情链接

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 创建数据库

  1. create database restaurant on primary
  2. (
  3. name='restaurant',
  4. filename='D:\database\restaurant.mdf',
  5. size=5MB,
  6. maxsize=100MB,
  7. filegrowth=15%
  8. )
  9. Log on
  10. (
  11. name='restaurant_log',
  12. filename='D:\database\restaurant.ldf',
  13. size=5MB,
  14. maxsize=100MB,
  15. filegrowth=15%
  16. )
  17. GO
  18. use restaurant;
复制代码

1.2 创建表

  1. -- 餐桌表
  2. create table TableInfo
  3. (
  4. Table_Id int primary key not null,
  5. Table_Num int not null,
  6. Table_Status char(10) not null
  7. );
  8. -- 顾客表
  9. create table CustomerInfo
  10. (
  11. Cus_Id int primary key not null,
  12. Table_Id int not null,
  13. Cus_num int not null,
  14. Intime datetime not null
  15. );
  16. -- 收银员表
  17. create table CashierInfo
  18. (
  19. -- 需要完整代码请添加文章底部微信,付费咨询
  20. );
  21. -- 菜品表
  22. create table FoodInfo
  23. (
  24. -- 需要完整代码请添加文章底部微信,付费咨询
  25. );
  26. -- 菜品折扣表
  27. create table DiscountInfo
  28. (
  29. -- 需要完整代码请添加文章底部微信,付费咨询
  30. );
  31. --点菜单表
  32. create table OrderInfo
  33. (
  34. -- 需要完整代码请添加文章底部微信,付费咨询
  35. );
  36. -- 收银表
  37. create table ChargeInfo
  38. (
  39. -- 需要完整代码请添加文章底部微信,付费咨询
  40. );
  41. -- 顾客状态实时表
  42. create table CuststatusInfo
  43. (
  44. -- 需要完整代码请添加文章底部微信,付费咨询
  45. );
  46. -- 顾客排队表
  47. create table Queue
  48. (
  49. -- 需要完整代码请添加文章底部微信,付费咨询
  50. );
复制代码

1.3 添加外键约束

  1. --折扣菜品菜品id是菜品表菜品id的外键
  2. alter table CustomerInfo
  3. add constraint fk_Tab_Cu foreign key(Table_Id) references TableInfo(Table_Id);
  4. --折扣菜品菜品id是菜品表菜品id的外键
  5. alter table DiscountInfo
  6. add -- 需要完整代码请添加文章底部微信,付费咨询
  7. --点菜单的菜品id是菜品表菜品id的外键,顾客id是顾客表顾客id的外键
  8. alter table OrderInfo
  9. add -- 需要完整代码请添加文章底部微信,付费咨询
  10. --收银单的顾客id是顾客表顾客id的外键,收银员id是收银员表收银员编号的外键,用餐餐桌id是餐桌表餐桌id的外键
  11. alter table ChargeInfo
  12. add -- 需要完整代码请添加文章底部微信,付费咨询
  13. --顾客状态实时表的顾客id是顾客表顾客id的外键
  14. alter table CuststatusInfo
  15. add -- 需要完整代码请添加文章底部微信,付费咨询
  16. --顾客排队表的顾客id是顾客表顾客id的外键
  17. alter table Queue
  18. add -- 需要完整代码请添加文章底部微信,付费咨询
复制代码

2.插入数据

  1. --餐桌插入数据
  2. insert into TableInfo values(1,2,'空闲');
  3. insert into -- 需要完整代码请添加文章底部微信,付费咨询
  4. --顾客插入数据
  5. insert into CustomerInfo values(1001,2,1,'2019-11-19 08:21:56');
  6. insert into -- 需要完整代码请添加文章底部微信,付费咨询
  7. --收银员插入数据
  8. insert into -- 需要完整代码请添加文章底部微信,付费咨询
  9. --菜品插入数据
  10. insert into FoodInfo -- 需要完整代码请添加文章底部微信,付费咨询
  11. --菜品折扣插入数据
  12. insert into DiscountInfo -- 需要完整代码请添加文章底部微信,付费咨询
  13. --点菜单插入数据
  14. insert into OrderInfo -- 需要完整代码请添加文章底部微信,付费咨询
  15. --结算单表插入数据
  16. insert into ChargeInfo -- 需要完整代码请添加文章底部微信,付费咨询
  17. --顾客状态插入数据
  18. insert into CuststatusInfo -- 需要完整代码请添加文章底部微信,付费咨询
  19. --顾客排队表插入数据
  20. insert into Queue -- 需要完整代码请添加文章底部微信,付费咨询
复制代码

3.索引

  1. --建立索引
  2. CREATE INDEX Index_ Cash_Name ON -- 需要完整代码请添加文章底部微信,付费咨询
复制代码

4.查询

  1. select
  2. FoodInfo.Food_id as 菜品编号,
  3. FoodInfo.Food_name as 菜品名称,
  4. Food_Type as 菜品类型,
  5. FoodInfo.Cuisine AS 菜品菜系,
  6. Price as 价格,
  7. DiscountInfo.Discount as 折扣
  8. from FoodInfo inner join DiscountInfo
  9. on FoodInfo.Food_id=DiscountInfo.Food_id;
复制代码

  1. select
  2. -- 需要完整代码请添加文章底部微信,付费咨询
复制代码

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.游标

显示有折扣的菜品信息
– 需要完整代码请添加文章底部微信,付费咨询

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行