《数据库应用系统实践》------ 订餐外卖系统

系列文章

《数据库应用系统实践》------ 订餐外卖系统



一、需求分析

1、系统背景

为了方便外卖的配送,我设计了订餐外卖系统来满足需求。

2、 系统功能结构(需包含功能结构框图和模块说明)

(1)功能结构图
在这里插入图片描述

(2)模块说明
系统分为用户、外卖、管理员三个大的模块
每个模块包含相应信息。

3.系统功能简介

管理员可以对用户信息以及外卖信息进行管理,用户可以查询相关信息。

二、概念模型设计

1.基本要素(符号介绍说明)

.基本要素(符号介绍说明)
① 矩形:表示实体。
② 椭圆形:表示属性,即实体的属性。
③ 菱形:表示联系。
④ 连线:该连线为没有方向的线段,分为连接实体与属性(矩形与椭圆形之间的连线)和连接实体与联系名(矩形与菱形之间的连线);实体与联系名的连线旁需标注联系的类型,如1:1、1:n、m:n。
注意:在联系类型标注时请按照约定俗成的方式标注,一对多使用1:n,多对多使用m:n,如果超过两个实体请采用m:n:p:q:

2.ER图

在这里插入图片描述

三、逻辑模型设计

1.ER模型向关系模型转换规则

① 实体转换为单独的关系模式。
② 一对一联系转换为关系模式有两种方法。一、将联系转换为单独的关系模式;二、将其中一个实体的之间加入到另外一个实体的关系模式中,作为外键。
③ 一对多联系转换为关系模式有两种方法。一、将联系转换为单独的关系模式;二、将n实体的主键合并到1实体的关系模式中,作为1实体关系模式的外键。

2.转换后的关系模型

用户(用户账号,密码,手机号,管理员账号)
外卖(外卖号,外卖名,单价,管理员账号)
管理员(管理员账号,密码)
购买(用户账号,外卖号)

3.关系模型优化(达到3NF)

以上要素都属于第三范式

四、物理设计

1.创建数据库的SQL语句或截图

CREATE DATABASE takeaway
ON PRIMARY
(NAME=YAN,
FILENAME='E:\test\takeaway.mdf',
SIZE=5MB,
MAXSIZE=UNLIMITED)
LOG ON
(NAME=YAN_log,
FILENAME='E:\test\takeaway_log.ldf',
SIZE=5MB,
MAXSIZE=UNLIMITED)

2.创建所有表的SQL语句或截图(包含完整性约束)

CREATE TABLE 管理员(
管理员账号       CHAR(20)      PRIMARY KEY,
密码			 CHAR(20)    NOT NULL
)

CREATE TABLE 用户(
用户账号        CHAR(20)      PRIMARY KEY,
密码		    CHAR(20)     NOT NULL,
手机号		    CHAR(20)     NOT NULL,
管理员账号      CHAR(20)     NOT NULL
FOREIGN KEY (管理员账号) REFERENCES 管理员(管理员账号)
)

CREATE TABLE 外卖(
外卖号               CHAR(20)     PRIMARY KEY,
外卖名               CHAR(20)     NOT NULL,
单价                 CHAR(20)     NOT NULL,
管理员账号           CHAR(
当前,餐饮业还面临着越来越激烈的市场竞争、要想在竞争中取胜,必须采用先进的管理方法和手段。实现先进的计算机网络化管理,能更方便快捷的满足顾客的就餐需要,使管理更合理、更先进;减少人力、物力资源的浪费,降低成本;提高工作效率,提高管理效率;提高经济效益,从而提高餐厅的整体竞争力。 系统为顾客提供了各种美食的详细信息,可以方便顾客对美食进行选购,顾客还可对自己的个人信息进行修改,可以查看过往订过的美食的信息;为餐厅提供了一个虚拟的店面,方便餐厅管理人员了解顾客的需求,进而改变下一阶段的销售策略,还可以进行美食管理,订单管理,会员信息管理,其中,超级管理员还可以对管理员的信息进行管理。 本系统开发使用B/S结构,严格的按照软件工程的思想贯穿系统计,利用Java语言,以Oracle作为系统数据库,实现网上订餐系统的开发。这些先进的开发思想和技术手段有力地保证了此系统可以安全地、高效地为餐厅的运营和顾客的就餐进行服务。 本文介绍了经过用户需求分析后,对订餐系统的基本计、系统计、详细计的开发研制过程。本文所计的功能满足餐厅的实际需求,使餐厅在订餐方面更加科学化,减少了人物力资源的不合理消耗,最后实现了提高工作效率的目的。
<think>好的,我现在需要帮用户查找在线订餐管理系统的实体关系(E-R)和数据库计。首先,我要回忆一下用户提供的引用内容,看看有没有相关的信息。用户给出的三个引用中,引用[2]提到了基于Spring Boot和MySQL的网上订餐系统,引用[3]是关于订餐外卖系统数据库应用实践,还提到了一些SQL Server相关的资料。 用户的需求是E-R,所以需要确定在线订餐系统的核心实体和它们之间的关系。常见的实体应该包括用户、餐厅、菜品、订单、订单详情等。接下来,我需要整理这些实体及其属性,并建立关系。 首先,用户实体,属性可能有用户ID、用户名、密码、联系方式、地址等。餐厅实体包括餐厅ID、名称、地址、联系方式。菜品实体有菜品ID、名称、价格、描述、所属餐厅ID。订单实体包含订单ID、用户ID、餐厅ID、下单时间、总金额、状态等。订单详情则记录每个订单中的具体菜品,包括订单详情ID、订单ID、菜品ID、数量、单价。 然后,关系方面,用户和订单是一对多,一个用户可以下多个订单。餐厅和菜品是一对多,一个餐厅有多个菜品。订单和订单详情是一对多,一个订单包含多个菜品。餐厅和订单之间可能是一对多,因为一个餐厅可以有多个订单,但一个订单只能属于一个餐厅。 需要注意外键的置,比如订单中的用户ID和餐厅ID分别关联用户和餐厅表。订单详情中的订单ID和菜品ID分别关联订单和菜品表。 现在要考虑是否需要其他实体,比如支付信息、配送信息。根据引用[2]和[3],系统可能涉及支付和配送,所以可能需要支付实体和配送员实体。支付实体属性有支付ID、订单ID、支付方式、金额、状态、时间。配送员实体包括配送员ID、姓名、联系方式、状态等,订单可能需要关联配送员ID。 此外,可能还有评价实体,记录用户对订单的评价,评价ID、订单ID、评分、评论内容、时间等。 总结一下,核心实体包括用户、餐厅、菜品、订单、订单详情、支付、配送员、评价。然后绘制E-R时,用矩形表示实体,菱形表示关系,连线标注基数,如1对多或多对多。 在数据库计中,每个实体对应一张表,关系通过外键实现。例如,订单表中的用户ID和餐厅ID是外键,订单详情表的订单ID和菜品ID也是外键。支付表和配送表与订单表关联。 用户可能还需要知道属性和主键的置,比如每个表的主键通常是自增的ID,订单详情可能需要复合主键或者单独的主键ID。此外,索引的优化,比如在用户ID、餐厅ID等常用查询字段上加索引,提升性能,这点引用[3]中的文献提到了SQL Server性能优化方法,可以借鉴。 最后,根据这些信息,可以画出E-R,并给出相应的数据库表结构示例。用户可能需要具体的SQL语句或者表,但作为文本回答,可以描述结构,并建议使用工具如PowerDesigner或在线工具绘制。同时,引用[2]提到的系统使用MySQL,而引用[3]提到SQL Server,所以计时需注意数据库差异,但E-R是通用的。</think>### 在线订餐管理系统 E-R数据库计 #### 一、核心实体与关系 在线订餐系统的核心实体包括:**用户**、**餐厅**、**菜品**、**订单**、**订单详情**、**支付信息**、**配送信息**。以下是实体属性及关系说明: 1. **用户(User)** - 属性:用户ID(主键)、用户名、密码、手机号、地址、注册时间 - 关联:与订单(1对多) 2. **餐厅(Restaurant)** - 属性:餐厅ID(主键)、名称、地址、联系方式、营业状态 - 关联:与菜品(1对多)、与订单(1对多) 3. **菜品(Dish)** - 属性:菜品ID(主键)、名称、价格、分类(如主食/饮品)、描述、库存量、餐厅ID(外键) - 关联:与订单详情(多对多,通过中间表实现) 4. **订单(Order)** - 属性:订单ID(主键)、用户ID(外键)、餐厅ID(外键)、下单时间、总金额、订单状态(如待支付/配送中/已完成) - 关联:与订单详情(1对多)、与支付信息(1对1) 5. **订单详情(OrderItem)** - 属性:详情ID(主键)、订单ID(外键)、菜品ID(外键)、数量、单价 - 作用:记录订单中每个菜品的购买信息 6. **支付信息(Payment)** - 属性:支付ID(主键)、订单ID(外键)、支付方式(如支付宝/微信)、支付时间、支付状态 7. **配送信息(Delivery)** - 属性:配送ID(主键)、订单ID(外键)、配送员ID(外键)、配送状态、预计到达时间 #### 二、E-R示意(文字描述) ``` 用户(User) ——<下单>—— 订单(Order) ——<包含>—— 订单详情(OrderItem) 订单(Order) ——<关联>—— 支付信息(Payment) 订单(Order) ——<关联>—— 配送信息(Delivery) 餐厅(Restaurant) ——<提供>—— 菜品(Dish) 配送信息(Delivery) ——<由>—— 配送员(DeliveryPerson) ``` #### 三、关键表结构计示例(MySQL语法) ```sql -- 用户表 CREATE TABLE User ( user_id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL, phone VARCHAR(20), address VARCHAR(200) ); -- 订单表(含外键约束) CREATE TABLE Order ( order_id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, restaurant_id INT, total_amount DECIMAL(10,2), status ENUM('pending', 'paid', 'delivering', 'completed'), FOREIGN KEY (user_id) REFERENCES User(user_id), FOREIGN KEY (restaurant_id) REFERENCES Restaurant(restaurant_id) ); -- 订单详情表(多对多关系的中间表) CREATE TABLE OrderItem ( order_item_id INT PRIMARY KEY AUTO_INCREMENT, order_id INT, dish_id INT, quantity INT, price DECIMAL(10,2), FOREIGN KEY (order_id) REFERENCES Order(order_id), FOREIGN KEY (dish_id) REFERENCES Dish(dish_id) ); ``` #### 四、计要点 1. **数据完整性**:通过外键约束实现实体间的关联(如订单必须关联有效用户和餐厅)[^3]。 2. **性能优化**:对高频查询字段(如用户ID、订单状态)建立索引[^3]。 3. **扩展性**:订单状态和支付状态使用枚举类型,便于后续扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AXiaoFighting

给小编价格鸡腿吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值