当前位置: 首页 > article >正文

手把手教你用MySQL搭建苍穹外卖数据库(附完整sky.sql源码)

从零构建外卖系统数据库MySQL实战与设计精要第一次接触数据库设计时我盯着电脑屏幕发呆了整整半小时——那些看似简单的用户地址、菜品分类和订单状态到底该如何用数据表合理表达如果你也曾在数据库建模时感到无从下手这篇实战指南将带你用MySQL一步步构建完整的外卖系统数据库并附赠可直接部署的sky.sql源码。1. 数据库规划外卖业务的核心骨架任何成功的数据库设计都始于对业务逻辑的透彻理解。外卖平台看似简单实则包含用户端、商家端和配送端三个维度的复杂交互。我们需要先梳理出最核心的实体关系用户侧核心表用户信息(user)、地址簿(address_book)商品侧核心表菜品分类(category)、菜品(dish)、套餐(setmeal)交易侧核心表购物车(shopping_cart)、订单(orders)、订单明细(order_detail)提示在设计初期建议用纸笔画出各实体间的关系图这比直接写SQL更能避免后期结构性问题一个典型的ER图应该包含以下关键关系erDiagram USER ||--o{ ADDRESS_BOOK : has CATEGORY ||--o{ DISH : contains DISH ||--o{ DISH_FLAVOR : has SETMEAL ||--o{ SETMEAL_DISH : includes USER ||--o{ SHOPPING_CART : maintains USER ||--o{ ORDERS : places ORDERS ||--o{ ORDER_DETAIL : contains2. 用户模块地址簿的智能设计地址管理是外卖系统的关键功能好的设计应该兼顾查询效率和数据完整性。以下是经过实战检验的地址表结构CREATE TABLE address_book ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint NOT NULL COMMENT 关联用户ID, consignee varchar(50) DEFAULT NULL COMMENT 收货人, phone varchar(11) NOT NULL COMMENT 手机号, province_code varchar(12) DEFAULT NULL COMMENT 省级编码, province_name varchar(32) DEFAULT NULL COMMENT 省级名称, city_code varchar(12) DEFAULT NULL COMMENT 市级编码, district_code varchar(12) DEFAULT NULL COMMENT 区级编码, detail varchar(200) DEFAULT NULL COMMENT 详细地址, is_default tinyint(1) DEFAULT 0 COMMENT 默认地址标记, PRIMARY KEY (id), KEY idx_user_id (user_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;设计要点解析采用三级行政区划编码而非直接存储名称便于后续与地图API集成为user_id建立索引确保用户查询自己地址时的效率使用is_default标记实现默认地址功能避免频繁更新注意地址类数据建议使用utf8mb4字符集确保生僻字和emoji的正常存储3. 商品中心分类与SKU的优雅表达商品体系设计直接影响后续运营灵活性。我们采用分类→菜品两级结构并引入口味定制功能-- 分类表 CREATE TABLE category ( id bigint NOT NULL AUTO_INCREMENT, type int DEFAULT NULL COMMENT 1菜品分类 2套餐分类, name varchar(32) NOT NULL COMMENT 分类名称, sort int DEFAULT 0 COMMENT 展示顺序, status int DEFAULT 1 COMMENT 启用状态, PRIMARY KEY (id), UNIQUE KEY idx_name (name) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 菜品表 CREATE TABLE dish ( id bigint NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, category_id bigint NOT NULL, price decimal(10,2) DEFAULT NULL, image varchar(255) DEFAULT NULL COMMENT 封面图URL, description varchar(255) DEFAULT NULL, status int DEFAULT 1 COMMENT 0停售 1起售, PRIMARY KEY (id), UNIQUE KEY idx_name (name), KEY idx_category (category_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 菜品口味表 CREATE TABLE dish_flavor ( id bigint NOT NULL AUTO_INCREMENT, dish_id bigint NOT NULL, name varchar(32) DEFAULT NULL COMMENT 口味名, value varchar(255) DEFAULT NULL COMMENT 可选值JSON, PRIMARY KEY (id), KEY idx_dish (dish_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;商品体系三大设计技巧分类去重通过name字段的唯一索引避免川菜和川菜 这类重复分类状态分离分类和菜品都有独立的状态控制实现灵活上下架口味扩展使用JSON格式存储多选值适应微辣/中辣/重辣等场景4. 订单系统事务与数据一致性的实战订单系统是交易的核心需要特别注意事务完整性和查询效率。我们的设计方案包含主表和明细表-- 订单主表 CREATE TABLE orders ( id bigint NOT NULL AUTO_INCREMENT, number varchar(50) DEFAULT NULL COMMENT 订单号, status int DEFAULT 1 COMMENT 订单状态, user_id bigint NOT NULL, address_book_id bigint NOT NULL, order_time datetime NOT NULL, amount decimal(10,2) NOT NULL, remark varchar(100) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY idx_number (number), KEY idx_user (user_id), KEY idx_status (status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 订单明细表 CREATE TABLE order_detail ( id bigint NOT NULL AUTO_INCREMENT, order_id bigint NOT NULL, dish_id bigint DEFAULT NULL, setmeal_id bigint DEFAULT NULL, dish_flavor varchar(50) DEFAULT NULL, number int DEFAULT 1 COMMENT 数量, amount decimal(10,2) NOT NULL COMMENT 单价, PRIMARY KEY (id), KEY idx_order (order_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;订单处理最佳实践使用存储过程处理下单逻辑确保减库存→创建订单→生成明细的事务原子性订单号采用日期随机数模式避免连续编号暴露业务量为status字段建立索引方便后台按状态筛选订单5. 性能优化索引与查询的黄金法则当数据量增长到10万级时这些优化策略能让你的系统保持流畅必须建立的索引用户地址表的user_id字段订单表的user_id和status组合商品分类表的type字段查询优化示例-- 反例全表扫描 SELECT * FROM orders WHERE DATE(order_time) 2023-06-01; -- 正例利用索引范围查询 SELECT * FROM orders WHERE order_time 2023-06-01 00:00:00 AND order_time 2023-06-02 00:00:00;缓存策略使用Redis缓存热门菜品信息对分类数据实施读写分离订单历史采用分表策略按用户ID哈希分片6. 安全防护从SQL注入到数据加密数据库安全不容忽视我们采用五层防护体系预处理语句永远使用参数化查询# 错误示范 cursor.execute(fSELECT * FROM users WHERE name {user_input}) # 正确做法 cursor.execute(SELECT * FROM users WHERE name %s, (user_input,))最小权限原则为应用账号设置精确的CRUD权限敏感数据加密CREATE TABLE user ( ... phone varchar(16) NOT NULL COMMENT AES加密存储, id_number varchar(64) DEFAULT NULL COMMENT RSA加密 );审计日志记录所有管理操作CREATE TABLE audit_log ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint DEFAULT NULL, action varchar(20) NOT NULL, sql_text text, ip_address varchar(45) DEFAULT NULL, created_at datetime NOT NULL, PRIMARY KEY (id) );定期备份采用xtrabackup实现热备份7. 实战进阶分布式ID与分库分表当单表数据突破500万时需要考虑水平扩展方案雪花算法ID生成public class SnowflakeIdGenerator { private final long twepoch 1288834974657L; private final long workerIdBits 5L; private final long datacenterIdBits 5L; private final long sequenceBits 12L; public synchronized long nextId() { long timestamp timeGen(); if (timestamp lastTimestamp) { throw new RuntimeException( String.format(Clock moved backwards. Refusing to generate id for %d milliseconds, lastTimestamp - timestamp)); } // 实现代码继续... } }分库分表策略用户表按user_id % 16分片订单表按月份分表orders_202301使用ShardingSphere实现透明访问完整数据库源码已打包为sky.sql文件包含所有表的DDL语句基础数据INSERT脚本存储过程和函数示例性能测试数据集生成器在本地MySQL执行以下命令即可部署mysql -u root -p sky_take_out sky.sql记得根据实际业务需求调整字段长度和索引策略。我曾在一个日订单量3万的外卖系统中采用这种设计即使在促销高峰期也能保持毫秒级响应。

相关文章:

手把手教你用MySQL搭建苍穹外卖数据库(附完整sky.sql源码)

从零构建外卖系统数据库:MySQL实战与设计精要 第一次接触数据库设计时,我盯着电脑屏幕发呆了整整半小时——那些看似简单的用户地址、菜品分类和订单状态,到底该如何用数据表合理表达?如果你也曾在数据库建模时感到无从下手&#…...

nli-distilroberta-base构建智能Agent:实现多轮对话与复杂任务推理

基于nli-distilroberta-base构建智能Agent:实现多轮对话与复杂任务推理 1. 智能Agent的应用场景与挑战 在现代人机交互场景中,用户越来越倾向于使用自然语言表达复杂需求。比如"帮我订下周二上午去上海的机票,并安排下午2点与客户A的会…...

3步实现QQ空间完整备份:GetQzonehistory让数字记忆永不丢失

3步实现QQ空间完整备份:GetQzonehistory让数字记忆永不丢失 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的青春记忆大多沉淀在QQ空间里&#…...

Cocos Creator平台适配层框架设计

在 Cocos Creator 多平台开发中,平台抽象层不仅是架构设计问题,更是工程落地能力的体现。如果仅停留在概念层面,很容易流于形式。因此,本文在系统总结的基础上,结合实际代码示例,说明如何构建一个可落地的多…...

2026届毕业生推荐的五大降重复率工具实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 由自然语言处理跟深度学习算法奠基的AI论文查重技术,可辨认文本里的模式重复、语…...

3分钟搭建PUBG终极雷达:免费实现战场全透视的完整指南

3分钟搭建PUBG终极雷达:免费实现战场全透视的完整指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-maphac…...

Reportr安全配置指南:如何保护你的个人数据仪表板

Reportr安全配置指南:如何保护你的个人数据仪表板 【免费下载链接】dashboard Your lifes personal dashboard. 项目地址: https://gitcode.com/gh_mirrors/das/dashboard Reportr是一个开源的个人数据仪表板项目,帮助用户追踪和可视化生活中的各…...

Fancy Components最佳实践:性能优化和组件组合技巧终极指南

Fancy Components最佳实践:性能优化和组件组合技巧终极指南 【免费下载链接】fancy 项目地址: https://gitcode.com/gh_mirrors/fan/fancy Fancy Components是一个不断增长的React动画组件库,专注于为网站添加精美、有趣的微交互效果。作为开源项…...

如何快速从Google Drive下载共享文件:Python极简指南

如何快速从Google Drive下载共享文件:Python极简指南 【免费下载链接】google-drive-downloader Minimal class to download shared files from Google Drive. 项目地址: https://gitcode.com/gh_mirrors/go/google-drive-downloader Google Drive作为最常用…...

Avian Physics vs 其他物理引擎:为什么选择基于XPBD的解决方案 [特殊字符]

Avian Physics vs 其他物理引擎:为什么选择基于XPBD的解决方案 🚀 【免费下载链接】avian ECS-driven 2D and 3D physics engine for the Bevy game engine. 项目地址: https://gitcode.com/gh_mirrors/be/avian 在游戏开发的世界中,物…...

完整Modbus协议栈:pymodbus核心组件详解

完整Modbus协议栈:pymodbus核心组件详解 【免费下载链接】pymodbus A full modbus protocol written in python 项目地址: https://gitcode.com/gh_mirrors/py/pymodbus PyModbus是一个用Python编写的完整Modbus协议实现,提供了客户端、服务器和模…...

TMSpeech:Windows平台离线语音转文字的终极解决方案

TMSpeech:Windows平台离线语音转文字的终极解决方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而手忙脚乱吗?还在为在线课程笔记而烦恼吗?今天我要向你介绍一…...

nomacs开发者指南:从源码编译到自定义构建的完整教程

nomacs开发者指南:从源码编译到自定义构建的完整教程 【免费下载链接】nomacs nomacs is a free image viewer for windows, linux, and mac systems. 项目地址: https://gitcode.com/gh_mirrors/no/nomacs 欢迎来到nomacs开发者指南!nomacs是一款…...

AntiDupl.NET:彻底清理重复图片的终极免费解决方案

AntiDupl.NET:彻底清理重复图片的终极免费解决方案 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因电脑中堆积如山的重复照片而烦恼?…...

Argo Events 高级过滤技巧:数据过滤、上下文过滤和时间过滤的完整指南

Argo Events 高级过滤技巧:数据过滤、上下文过滤和时间过滤的完整指南 【免费下载链接】argo-events Event-driven Automation Framework for Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ar/argo-events Argo Events 是 Kubernetes 生态系统中强大…...

DownKyi:如何用一款开源工具解决B站视频下载的3大核心痛点?

DownKyi:如何用一款开源工具解决B站视频下载的3大核心痛点? 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取…...

Flink Connector for StarRocks 1.1.14 公测版尝鲜:手把手教你实现双向数据同步(Source+Sink)

Flink Connector for StarRocks 1.1.14 公测版深度实战:构建双向数据管道的完整指南 StarRocks与Flink的深度整合正在重新定义实时数据处理的边界。最新发布的flink-connector-starrocks-1.1.14-snapshot版本首次实现了Source功能的完整支持,这意味着我们…...

【2026奇点技术白皮书首发】:全球仅23家通过AI原生研发成熟度三级认证企业的共性实践

第一章:AI原生软件研发:2026奇点智能技术大会核心议题 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发已超越传统“AI赋能”范式,进入以大模型为运行时、以提示与推理链为基本构件、以LLM-as-OS为架构基底的新纪元。2026奇点智…...

多媒体应用开发:QmlBook音频视频处理实战指南

多媒体应用开发:QmlBook音频视频处理实战指南 【免费下载链接】qmlbook The source code for the upcoming qml book 项目地址: https://gitcode.com/gh_mirrors/qm/qmlbook 想要快速掌握Qt多媒体应用开发吗?QmlBook提供了完整的音频视频处理实战…...

Alibi分布式计算指南:如何用Ray加速大规模模型解释

Alibi分布式计算指南:如何用Ray加速大规模模型解释 【免费下载链接】alibi Algorithms for explaining machine learning models 项目地址: https://gitcode.com/gh_mirrors/al/alibi 在处理大规模机器学习模型解释时,单机计算往往面临性能瓶颈。…...

noc-examples-processing入门:从零开始学习Processing编程的终极教程

noc-examples-processing入门:从零开始学习Processing编程的终极教程 【免费下载链接】noc-examples-processing Repository for example code from The Nature of Code book 项目地址: https://gitcode.com/gh_mirrors/no/noc-examples-processing noc-exam…...

为什么92%的AI项目在上线后遭遇备份失效?3个被忽视的元数据一致性陷阱曝光

第一章:AI原生软件研发容灾备份策略设计 2026奇点智能技术大会(https://ml-summit.org) AI原生软件具备模型权重动态更新、推理服务弹性伸缩、训练流水线持续迭代等特性,传统基于静态二进制与数据库快照的容灾方案难以覆盖模型版本、特征存储、向量索引…...

2025届毕业生推荐的降重复率助手实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek AI写作软件,是内容生产领域里的辅助工具,它的核心价值表现在&#xf…...

HarvestText关系网络:基于共现关系的实体社交网络构建指南

HarvestText关系网络:基于共现关系的实体社交网络构建指南 【免费下载链接】HarvestText 文本挖掘和预处理工具(文本清洗、新词发现、情感分析、实体识别链接、关键词抽取、知识抽取、句法分析等),无监督或弱监督方法 项目地址:…...

LaTeX公式一键转换Word:告别复制粘贴的终极解决方案

LaTeX公式一键转换Word:告别复制粘贴的终极解决方案 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为学术论文中的公式迁移而烦…...

通达信DLL插件实战:5分钟搞定热点板块成份股自动筛选(附股池模板)

通达信DLL插件高阶应用:热点板块成份股智能筛选全攻略 在瞬息万变的证券市场中,能否快速捕捉热点板块的轮动机会,往往决定了投资者的收益水平。传统手动筛选方式不仅效率低下,还容易错过最佳买卖时机。本文将深入解析如何利用通达…...

如何快速掌握Node.js最佳实践:2024终极指南

如何快速掌握Node.js最佳实践:2024终极指南 【免费下载链接】nodebestpractices :white_check_mark: The Node.js best practices list (July 2024) 项目地址: https://gitcode.com/GitHub_Trending/no/nodebestpractices Node.js最佳实践项目是Node.js开发者…...

AI原生研发供应商怎么选?2024最新Gartner交叉验证的5大否决项与3个隐形红线

第一章:AI原生软件研发供应商评估标准的范式迁移 2026奇点智能技术大会(https://ml-summit.org) 传统软件供应商评估体系聚焦于项目交付周期、人力成本与文档完备性,而AI原生软件的研发本质已发生根本性转变:模型即服务(MaaS&am…...

Rebus扩展开发指南:如何编写自定义传输、序列化和中间件

Rebus扩展开发指南:如何编写自定义传输、序列化和中间件 【免费下载链接】Rebus :bus: Simple and lean service bus implementation for .NET 项目地址: https://gitcode.com/gh_mirrors/re/Rebus Rebus是一个为.NET平台设计的轻量级服务总线实现&#xff0…...

Go语言如何生成二维码_Go语言二维码生成教程【完整】

qrcode.Encode 返回 *image.RGBA 对象而非 PNG 字节流,需用 png.Encode 编码;忽略 error、尺寸非法、纠错等级误用常量、中文兼容性、URL 编码未解码、Content-Type 未前置设置、HTTPS 混合内容及颜色自定义需手动像素操作。qrcode.Encode 返回的不是 PN…...