所谓的“数据库设计”,其实就是我们餐厅的“记账本”分类。
我们开饭馆,无非就是记四件事:谁在干活、卖什么菜、谁来吃饭、卖了多少钱。
第一组:谁在干活?(管理端 B端)
这一组只有一张表,是给老板和员工用的。
-
employee(员工表)- 作用:这就是餐厅的“花名册”。
- 存什么:员工的名字、手机号、身份证,还有最重要的——账号和密码。
- 注意:你之前修的登录Bug,就是在跟这张表打交道。
第二组:卖什么菜?(菜单管理)
这一组表最多,因为菜单最复杂。想象一下你手里的纸质菜单:
-
category(分类表)- 作用:菜单的“大标题”。
- 例子:比如“特色蒸菜”、“酒水饮料”、“商务套餐”。没有它,菜单就是一团乱麻。
-
dish(菜品表)- 作用:具体的“单点菜”。
- 例子:宫保鸡丁、可乐、米饭。这里存了菜的名字、价格、图片。
-
dish_flavor(口味表)- 作用:菜的“个性化选项”。
- 例子:客人点“可乐”,你是要“常温”还是“去冰”?点“微辣”还是“重辣”?这些选项就存这儿。
-
setmeal(套餐表)- 作用:这就是“超值组合餐”。
- 例子:比如“单人豪华午餐”(里面可能包含一杯可乐+一份饭+一个菜)。
-
setmeal_dish(套餐-菜品关系表)- 作用:这是“套餐说明书”。
- 解释:它告诉数据库,“单人豪华午餐”这个ID里,具体包含了哪几个
dish(比如包含1个可乐、1个鸡腿)。
第三组:谁来吃饭?(用户端 C端)
这一组是给用小程序的客人准备的。
-
user(用户表)- 作用:客人的“微信身份证”。
- 关键点:这里有一个
openid,这是微信给每个用户的唯一编号,我们靠这个认出“谁是谁”。
-
address_book(地址表)- 作用:客人的“外卖地址簿”。
- 逻辑:一个用户可以有多个地址(公司、家、学校),所以单独拆一张表存。
-
shopping_cart(购物车表)- 作用:客人的“餐盘”。
- 场景:客人在小程序里点了菜,还没付钱的时候,数据就暂时存在这儿。
第四组:卖了多少钱?(交易核心)
这是老板最关心的,也是逻辑最难的一对儿兄弟。
-
orders(订单表)- 作用: “结账单的小票头” 。
- 存什么:这一单总共多少钱(
amount)、谁点的(user_id)、送到哪里、订单状态(是已支付还是已退款)。 - 注意:这里不存具体的菜名!只存总账。
-
order_detail(订单明细表)- 作用: “小票上的具体菜名列表” 。
- 存什么:这张小票(
order_id)里,买了2个汉堡、1杯可乐。每一行菜,就是一条记录。
简单总结一下
- 人:
employee(员工),user(顾客) - 物:
category(分类) ->dish(菜) +flavor(口味) ->setmeal(套餐) - 事:
shopping_cart(想买) ->orders(买了-总单) +order_detail(买了-清单)