点餐系统数据库设计--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.数据字典

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

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

5.数据流图

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

二、数据概念结构

1.数据结构

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

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

2.ER图

2.1局部ER图

(1)顾客信息E-R图
《点餐系统数据库设计--SQL Server》

(2)餐桌E-R图
《点餐系统数据库设计--SQL Server》

(3)顾客状态E-R图
《点餐系统数据库设计--SQL Server》

(4)菜品E-R图
《点餐系统数据库设计--SQL Server》

(5)点菜单E-R图
《点餐系统数据库设计--SQL Server》

(6)优惠信息E-R图
《点餐系统数据库设计--SQL Server》

(7)收银员E-R图
《点餐系统数据库设计--SQL Server》

(8)收银单E-R图
《点餐系统数据库设计--SQL Server》

(8)排队表E-R图

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

2.2 全局ER图

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

三、逻辑结构设计

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

1.实体

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

2.实体间联系

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

四、物理结构设计

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

4.1 顾客CustomerInfo

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

4.2 菜品信息FoodInfo

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

4.3 优惠信息DiscountInfo

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

4.4 点菜单OrderInfo

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

4.5 店员信息ManagerInfo

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

4.6 顾客状态实时表ManagerInfo

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

4.7 收银单ChargeInfo

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

4.8 顾客排队表Queue

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

五、数据库构建

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%
)

GO
use 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 CustomerInfo
add constraint fk_Tab_Cu foreign key(Table_Id) references TableInfo(Table_Id);

--折扣菜品菜品id是菜品表菜品id的外键
alter table DiscountInfo
add constraint fk_Dis_Fo foreign key(Food_Id) references FoodInfo(Food_Id);

--点菜单的菜品id是菜品表菜品id的外键,顾客id是顾客表顾客id的外键
alter table OrderInfo
add constraint fk_Or_Fo foreign key(Food_Id) references FoodInfo(Food_Id);
alter table OrderInfo
add constraint fk_Or_Cus foreign key(Cus_Id) references CustomerInfo(Cus_Id)

--收银单的顾客id是顾客表顾客id的外键,收银员id是收银员表收银员编号的外键,用餐餐桌id是餐桌表餐桌id的外键
alter table ChargeInfo
add constraint fk_Cu_Cha foreign key(Cus_Id) references CustomerInfo(Cus_Id);
alter table ChargeInfo
add constraint fk_Ca_Cha foreign key(Cash_Id) references CashierInfo(Cash_Id);
alter table ChargeInfo
add constraint fk_Tab_Cha foreign key(Table_Id) references TableInfo(Table_Id);

--顾客状态实时表的顾客id是顾客表顾客id的外键
alter table CuststatusInfo
add constraint fk_Ch_sta foreign key(Cus_Id) references CustomerInfo(Cus_Id)

--顾客排队表的顾客id是顾客表顾客id的外键
alter table Queue
add 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 DiscountInfo
on FoodInfo.Food_id=DiscountInfo.Food_id;

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

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

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

5.触发器

5.1 增加数据库触发器

点菜单产生一个数据自动传入收银单数据中,增加表OrderInfo,触发表ChargeInfo
《点餐系统数据库设计--SQL Server》

5.2 增触发器

新增客户自动默认排队,默认排队数桌人数为,后期可以修改,插入表CustomerInfo,触发表Queue
《点餐系统数据库设计--SQL Server》

5.3 删触发器

删除不在参与排队的客户信息,即删除排队表中的客户信息,删除表CustomerInfo,触发表Queue
《点餐系统数据库设计--SQL Server》

5.4 update触发器

更改客户人数,对应的排队人数也更新,更新CustomerInfo,触发CustomerInfo
《点餐系统数据库设计--SQL Server》

6.存储过程

6.1 新增存储过程

新增顾客存储过程
《点餐系统数据库设计--SQL Server》

6.2 变更存储过程

调节食品价格存储过程
《点餐系统数据库设计--SQL Server》

6.3 删除存储过程

根据顾客id删除顾客排队存储过程
《点餐系统数据库设计--SQL Server》

6.4 查询存储过程一

根据菜品类型查询快餐厅目前食品清单存储过程,默认主食
《点餐系统数据库设计--SQL Server》

6.5 查询存储过程二

根据客户id查询排队状态存储过程
《点餐系统数据库设计--SQL Server》

6.6 查询存储过程三

根据食物口味查询订单存储过程
《点餐系统数据库设计--SQL Server》

7.视图

7.1 菜品种类分布

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

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

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

测试
《点餐系统数据库设计--SQL Server》

8.自定义函数

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

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

测试
《点餐系统数据库设计--SQL Server》

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

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

9.游标

显示有折扣的菜品信息
《点餐系统数据库设计--SQL Server》

    原文作者:若如初见kk
    原文地址: https://blog.csdn.net/Artificial_idiots/article/details/122960029
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞