外卖项目数据库表分析

24 阅读2分钟

所谓的“数据库设计”,其实就是我们餐厅的“记账本”分类

我们开饭馆,无非就是记四件事:谁在干活卖什么菜谁来吃饭卖了多少钱


第一组:谁在干活?(管理端 B端)

这一组只有一张表,是给老板和员工用的。

  1. employee (员工表)

    • 作用:这就是餐厅的“花名册”。
    • 存什么:员工的名字、手机号、身份证,还有最重要的——账号和密码
    • 注意:你之前修的登录Bug,就是在跟这张表打交道。

第二组:卖什么菜?(菜单管理)

这一组表最多,因为菜单最复杂。想象一下你手里的纸质菜单:

  1. category (分类表)

    • 作用:菜单的“大标题”。
    • 例子:比如“特色蒸菜”、“酒水饮料”、“商务套餐”。没有它,菜单就是一团乱麻。
  2. dish (菜品表)

    • 作用:具体的“单点菜”。
    • 例子:宫保鸡丁、可乐、米饭。这里存了菜的名字、价格、图片。
  3. dish_flavor (口味表)

    • 作用:菜的“个性化选项”。
    • 例子:客人点“可乐”,你是要“常温”还是“去冰”?点“微辣”还是“重辣”?这些选项就存这儿。
  4. setmeal (套餐表)

    • 作用:这就是“超值组合餐”。
    • 例子:比如“单人豪华午餐”(里面可能包含一杯可乐+一份饭+一个菜)。
  5. setmeal_dish (套餐-菜品关系表)

    • 作用:这是“套餐说明书”。
    • 解释:它告诉数据库,“单人豪华午餐”这个ID里,具体包含了哪几个 dish(比如包含1个可乐、1个鸡腿)。

第三组:谁来吃饭?(用户端 C端)

这一组是给用小程序的客人准备的。

  1. user (用户表)

    • 作用:客人的“微信身份证”。
    • 关键点:这里有一个 openid,这是微信给每个用户的唯一编号,我们靠这个认出“谁是谁”。
  2. address_book (地址表)

    • 作用:客人的“外卖地址簿”。
    • 逻辑:一个用户可以有多个地址(公司、家、学校),所以单独拆一张表存。
  3. shopping_cart (购物车表)

    • 作用:客人的“餐盘”。
    • 场景:客人在小程序里点了菜,还没付钱的时候,数据就暂时存在这儿。

第四组:卖了多少钱?(交易核心)

这是老板最关心的,也是逻辑最难的一对儿兄弟。

  1. orders (订单表)

    • 作用“结账单的小票头”
    • 存什么:这一单总共多少钱(amount)、谁点的(user_id)、送到哪里、订单状态(是已支付还是已退款)。
    • 注意:这里不存具体的菜名!只存总账。
  2. order_detail (订单明细表)

    • 作用“小票上的具体菜名列表”
    • 存什么:这张小票(order_id)里,买了2个汉堡、1杯可乐。每一行菜,就是一条记录。

简单总结一下

  • employee(员工), user(顾客)
  • category(分类) -> dish(菜) + flavor(口味) -> setmeal(套餐)
  • shopping_cart(想买) -> orders(买了-总单) + order_detail(买了-清单)