0


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

目录

友情链接

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

createdatabase restaurant onprimary(
    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%)

GO
use restaurant;

1.2 创建表

-- 餐桌表createtable TableInfo
(
    Table_Id     intprimarykeynotnull,
    Table_Num    intnotnull,
    Table_Status char(10)notnull);-- 顾客表createtable CustomerInfo
(
    Cus_Id      intprimarykeynotnull,
    Table_Id  intnotnull,
    Cus_num      intnotnull,
    Intime      datetimenotnull);-- 收银员表createtable CashierInfo
(
    Cash_Id   intprimarykeynotnull,
    Cash_Name varchar(25)notnull,
    Tel       char(11)notnull);-- 菜品表createtable FoodInfo
(
    Food_Id      intprimarykeynotnull,
    Food_Name varchar(25)notnull,
    Cuisine   varchar(10)notnull,
    Food_Type varchar(4)notnull,
    Price     money
);-- 菜品折扣表createtable DiscountInfo
(
    Food_Id   intprimarykeynotnull,
    Food_Name varchar(25)notnull,
    Discount  floatnotnullcheck(Discount<=1)--折扣小于等于1);--点菜单表createtable OrderInfo
(
    Order_Id intnotnull,
    Cus_Id   intnotnull,
    Food_Id  intnotnull,
    Food_Num intnotnull,
    Ftaste   varchar(25)check(Ftaste in('甜','咸','酸')),PrimaryKey(Order_Id,Food_Id));-- 收银表createtable ChargeInfo
(
    Charg_Id intidentity(1,1)primarykeynotnull,
    Cash_Id  intnotnull,
    Cus_Id   intnotnull,
    Table_Id intnotnull,
    Spay     money notnull,
    Discount floatnotnull,
    Rpay     money notnull,
    Pay_time datetimenotnull);-- 顾客状态实时表createtable CuststatusInfo
(
    Cus_Id        intnotnull,
    iTime         datetimenotnull,
    Cus_Status    char(10)notnull,PrimaryKey(Cus_Id,Cus_Status));-- 顾客排队表createtable Queue
(
    Cus_Id        intprimarykeynotnull,
    Cus_num       intnotnull,
    Table_Num     intnotnull);

1.3 添加外键约束

--折扣菜品菜品id是菜品表菜品id的外键altertable CustomerInfo
addconstraint fk_Tab_Cu foreignkey(Table_Id)references TableInfo(Table_Id);--折扣菜品菜品id是菜品表菜品id的外键altertable DiscountInfo
addconstraint fk_Dis_Fo foreignkey(Food_Id)references FoodInfo(Food_Id);--点菜单的菜品id是菜品表菜品id的外键,顾客id是顾客表顾客id的外键altertable OrderInfo
addconstraint fk_Or_Fo foreignkey(Food_Id)references FoodInfo(Food_Id);altertable OrderInfo
addconstraint fk_Or_Cus foreignkey(Cus_Id)references CustomerInfo(Cus_Id)--收银单的顾客id是顾客表顾客id的外键,收银员id是收银员表收银员编号的外键,用餐餐桌id是餐桌表餐桌id的外键altertable ChargeInfo
addconstraint fk_Cu_Cha foreignkey(Cus_Id)references CustomerInfo(Cus_Id);altertable ChargeInfo
addconstraint fk_Ca_Cha foreignkey(Cash_Id)references CashierInfo(Cash_Id);altertable ChargeInfo
addconstraint fk_Tab_Cha foreignkey(Table_Id)references TableInfo(Table_Id);--顾客状态实时表的顾客id是顾客表顾客id的外键altertable CuststatusInfo
addconstraint fk_Ch_sta foreignkey(Cus_Id)references CustomerInfo(Cus_Id)--顾客排队表的顾客id是顾客表顾客id的外键altertable Queue
addconstraint fk_Qu_sta foreignkey(Cus_Id)references CustomerInfo(Cus_Id)

2.插入数据

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

3.索引

--建立索引CREATEINDEX Index_ Cash_Name ON CashierInfo (Cash_Name asc);CREATEINDEX 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 innerjoin DiscountInfo
on FoodInfo.Food_id=DiscountInfo.Food_id;

在这里插入图片描述

select 
    Food_Type as 食品类型,count(distinct Food_id)as 数量
from FoodInfo 
groupby 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.游标

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

标签: 数据库 sql sqlserver

本文转载自: https://blog.csdn.net/Artificial_idiots/article/details/122960029
版权归原作者 若如初见kk 所有, 如有侵权,请联系我们删除。

“点餐系统数据库设计--SQL Server”的评论:

还没有评论