适用场景
数据库课程设计、外卖或点餐小程序的毕业设计、任何「用户、商家、订单」三方平台的数据建模。答辩时最常被问的两处图上都有:订单和菜品之间用订单明细拆开;明细里单独保存下单时的单价,商家之后改价不影响历史订单。
怎么改成你的
- 加优惠券、支付流水、退款时,各建一个实体连到订单。
- 堂食点餐没有配送,删掉骑手和收货地址,加一个「桌台」实体。
- 字段名可以换成英文,方便直接对应到建表语句。
Mermaid 代码
food-delivery-er.mmd
erDiagram
用户 ||--o{ 收货地址 : 保存
用户 ||--o{ 订单 : 下单
商家 ||--o{ 菜品 : 上架
商家 ||--o{ 订单 : 接单
订单 ||--|{ 订单明细 : 包含
菜品 ||--o{ 订单明细 : 被点
骑手 ||--o{ 订单 : 配送
订单 ||--o| 评价 : 收到
用户 {
string 用户编号 PK
string 昵称
string 手机号
}
收货地址 {
string 地址编号 PK
string 用户编号 FK
string 详细地址
}
商家 {
string 商家编号 PK
string 店名
string 营业状态
}
菜品 {
string 菜品编号 PK
string 商家编号 FK
string 名称
decimal 价格
}
订单 {
string 订单号 PK
string 用户编号 FK
string 商家编号 FK
string 骑手编号 FK
decimal 实付金额
string 状态
}
订单明细 {
string 订单号 FK
string 菜品编号 FK
int 数量
decimal 下单单价
}
骑手 {
string 骑手编号 PK
string 姓名
string 手机号
}
评价 {
string 评价编号 PK
string 订单号 FK
int 评分
string 内容
}让 AI 按这个结构生成一份
把下面这段发给豆包、DeepSeek、Kimi 或元宝,再把它的回复整段粘贴到编辑器,会自动识别其中的代码。
prompt.txt
请用 Mermaid 的 erDiagram 语法画一张外卖订餐系统 ER 图:实体有用户、收货地址、商家、菜品、订单、订单明细、骑手、评价;用户对收货地址、用户对订单、商家对菜品、商家对订单、骑手对订单、菜品对订单明细是一对多,订单对订单明细是一对一或多,订单对评价是一对零或一;订单明细里保存数量和下单单价;每个实体列出 3 到 6 个字段并标出 PK 和 FK。只输出 mermaid 代码块。
常见问题
- 订单明细为什么要再存一遍单价?
菜品的价格会变。订单是历史记录,必须保留下单当时的价格,否则以后对账会出错。
- ||--|{ 和 ||--o{ 有什么不同?
前者是「一对一个或多个」,后者是「一对零个或多个」。一张订单至少有一条明细,所以用前者。
- 实体多了图很大怎么办?
按模块拆成几张,例如用户与地址、商家与菜品、订单与配送,每张图里保留和其他模块相连的实体。
同类模板
更新于 2026-11-11