来自苍穹外卖
一、各数据表含义与作用范围
| 表名 | 中文名 | 含义 | 作用范围 |
|---|---|---|---|
employee | 员工表 | 商家内部账号、状态与基础资料 | 管理端:员工登录、账号启停与信息维护 |
category | 分类表 | 菜品分类 / 套餐分类主数据 | 管理端维护;C 端展示菜单时只读引用 |
dish | 菜品表 | 单品主数据(名称、价、图、售卖状态等) | 管理端 CRUD;C 端浏览、加购、下单只读 |
dish_flavor | 菜品口味表 | 某道菜下的口味名与可选值 | 管理端随菜品维护;C 端选规格时只读 |
setmeal | 套餐表 | 套餐主数据 | 管理端 CRUD;C 端浏览、加购、下单只读 |
setmeal_dish | 套餐菜品关系表 | 套餐包含哪些菜、各多少份(可含名称/单价冗余) | 管理端配置套餐;C 端一般不直接写 |
user | 用户表 | C 端用户(如微信 openid 锚点) | C 端:登录/资料;与订单、地址、购物车关联 |
address_book | 地址表 | 用户收货地址、默认地址 | C 端维护;下单时选中并快照到订单 |
shopping_cart | 购物车表 | 待结算的菜品行或套餐行(按用户隔离) | C 端加购、改数量、清空;提交订单后对应落 order_detail |
orders | 订单表 | 订单头:单号、用户、地址、金额、状态与时间轴 | C 端提交生成;管理端接单、派送、完成/取消;可与定时任务配合超时处理 |
order_detail | 订单明细表 | 订单行:买的菜/套餐、数量、金额与下单时快照 | 随 orders 同事务写入;查询订单详情时展开 |
二、全局 ER 图(简化字段版)
erDiagram
employee {
BIGINT id PK
VARCHAR username
VARCHAR name
INT status
}
category {
BIGINT id PK
VARCHAR name
INT type
INT status
}
dish {
BIGINT id PK
VARCHAR name
BIGINT category_id FK
DECIMAL price
INT status
}
dish_flavor {
BIGINT id PK
BIGINT dish_id FK
VARCHAR name
VARCHAR value
}
setmeal {
BIGINT id PK
VARCHAR name
BIGINT category_id FK
DECIMAL price
INT status
}
setmeal_dish {
BIGINT id PK
BIGINT setmeal_id FK
BIGINT dish_id FK
INT copies
}
user {
BIGINT id PK
VARCHAR openid
VARCHAR name
VARCHAR phone
}
address_book {
BIGINT id PK
BIGINT user_id FK
VARCHAR consignee
VARCHAR phone
TINYINT is_default
}
shopping_cart {
BIGINT id PK
BIGINT user_id FK
BIGINT dish_id FK
BIGINT setmeal_id FK
INT number
DECIMAL amount
}
orders {
BIGINT id PK
VARCHAR number
BIGINT user_id FK
BIGINT address_book_id FK
INT status
DECIMAL amount
}
order_detail {
BIGINT id PK
BIGINT order_id FK
BIGINT dish_id FK
BIGINT setmeal_id FK
INT number
DECIMAL amount
}
category ||--o{ dish : "id -> category_id"
category ||--o{ setmeal : "id -> category_id"
dish ||--o{ dish_flavor : "id -> dish_id"
setmeal ||--o{ setmeal_dish : "id -> setmeal_id"
dish ||--o{ setmeal_dish : "id -> dish_id"
user ||--o{ address_book : "id -> user_id"
user ||--o{ shopping_cart : "id -> user_id"
user ||--o{ orders : "id -> user_id"
address_book ||--o{ orders : "id -> address_book_id"
orders ||--o{ order_detail : "id -> order_id"
dish ||--o{ order_detail : "id -> dish_id"
setmeal ||--o{ order_detail : "id -> setmeal_id"
三、逐条关系说明(字段对应 + 实际含义)
下面按“主表字段 -> 子表字段”描述每条关联的真实业务含义。
category.id->dish.category_id
表示一个分类下可以有多个菜品。比如“热菜”分类下有宫保鸡丁、鱼香肉丝。category.id->setmeal.category_id
表示一个分类下可以有多个套餐。比如“商务套餐”分类下有 A 套餐、B 套餐。dish.id->dish_flavor.dish_id
表示一个菜品可以配置多个口味选项。比如“宫保鸡丁”对应“不辣/微辣/中辣”。setmeal.id->setmeal_dish.setmeal_id
表示一个套餐会包含多条套餐明细记录(每条明细是一种菜品及份数)。dish.id->setmeal_dish.dish_id
表示同一道菜可以被多个套餐复用。比如“米饭”可以出现在多个套餐里。user.id->address_book.user_id
表示一个用户可以维护多个收货地址;每个地址只属于该用户。user.id->shopping_cart.user_id
表示购物车记录按用户隔离;每个用户看到的是自己的购物车数据。user.id->orders.user_id
表示一笔订单归属某个用户;一个用户可以有多笔历史订单。address_book.id->orders.address_book_id
表示这笔订单使用了哪条地址记录作为收货地址(下单时选中的地址)。orders.id->order_detail.order_id
表示一笔订单对应多条明细行;每条明细是一种购买项及数量。dish.id->order_detail.dish_id
表示该明细行购买的是某道菜品(非套餐场景)。setmeal.id->order_detail.setmeal_id
表示该明细行购买的是某个套餐(套餐场景)。
说明:
order_detail与shopping_cart同时有dish_id、setmeal_id,实际使用时通常二选一,用来区分“这行是菜品还是套餐”。
参考
苍穹外卖www.bilibili.com/video/BV1TP…
数据库设计文档.md
deekseek-v4