使用java web做的外卖系统的数据库设计
一登录表:用于用户登录
字段有:
1.login_id:是主键
2.login_acc
3.login_pwd
4.user_type;用户类别
二账户表:普通用户的个人信息
一个普通用户对应一个账号,一个账号也对应一个普通用户
用户的字段有
- user_id:和login_id共享主键
- user_name:记录用户名
- user_money:记录用户余额
- user_content:用户简介
- user_head:用户头像
三店家表:记录店家信息
一个店家对应一个账号,一个账号也对应一个店家
一个店家有一个主营菜,一个推荐菜,一个热门菜
字段有
- shop_id:和Login_id共享主键
- shop_name:店铺名
- shop_pos:店铺地址
- lng:店铺经度
- lat:店铺纬度
- shop_conntent:店铺简介
- 店铺一星期那些天营业
- 店铺开始营业时间
- 店铺结束营业时间
- 是否关联合法店家
- 主营菜id
- 推荐菜id
- 热门菜id (这个不能记录,动态查询出来的)
其它备注:
店铺需要关联一个合法的注册店家
暂时不实现注册店家的相关部分的功能
四用户送餐地址表
一个用户对应多个送餐地址,一个用户只有一个默认送餐地址
字段有
- user_address_id
- user_id,关联送餐人id,添加索引,快速查询
- user_address_name,送餐人姓名
- user_address_phone,送餐人电话
- user_address_pos, 送餐地址
- user_address_lng, 送餐人经度 类型是decimal(8,5) 经纬度是一个浮点型,也可以设为字符串(长度浪费)
- user_address_lat, 送餐人纬度
- user_address_isdef,是否是默认地址,默认地址约束,一个用户只有一个,默认地址不能直接删除防止误操作。
五用户关注店铺表
一个用户有多个关注店铺,一个店铺可以被多个用户关注.这是一个记录多对多关系的表,多对多关系至少有两种,单向的,只考虑关注,不考虑被关注。双向的,依赖关系,被依赖关系,那个订单依赖表就是。并且订单依赖表特殊之处还在于双方都是一个表
字段有
- user_interest_id:主键
- user_id:关联用户的id,添加索引,快速查询
- shop_id:记录店铺信息,添加外键,在店铺删除的时候这个也删除,并且还能防止随意设置无意义值
六店铺菜品表
一个店铺有多个菜品
字段有
- shop_food_id:主键
- shop_food_name:菜品名
- shop_food_price:菜品价格
- shop_food_num:菜品库存
- shop_id:关联店铺编号,添加索引
- shop_food_content菜品简介
七店铺操作表(合并到餐厅表)
一个店铺对应一个操作信息
限制一个店铺一天的添加,更新,删除的次数
字段有:
shop_id
shop_add
shop_update
shop_del
last_date
八店铺登录历史表
登录历史
login_his_id
login_his_uid
login_his_isNew
login_his_pos
login_his_key
login_his_time
九用户购物车表(直接关联用户,菜品)(合并到用户表里面)
一个用户一个购物车,一个购物车可以添加多个店铺的菜品
user_id(一个用户一个购物车,共享主键)
user_car_price(总价格)
user_car_num(商品数量)
user_car_discount(优惠价格),优惠价格目前就是直接优惠的金额,不考虑其它情况
十用户购物车详情表
购物车就是看看菜品信息,以及方便分类
这里直接把店铺的信息也弄上来, 方便分类
user_car_detatil_id:购物车详情id
user_id:用户id
shop_food_id:店铺菜品id,设置外键,区别历史记录,动态变化。并不是菜品放到购物车,价格等信息就一定了,
num:菜品数量
shop_id:店铺id,方便分类
shop_car_detail_info:一个购物详情有一个购物附件
十一用户订单表(历史记录)
一个用户订单对应一个用户,一个外卖员
order_id:主键
order_statue:订单状态:只查询不操作
前面已经说了,订单状态不可能通过电脑改变,用户不可能一边拿外卖一边用电脑修改订单状态,此系统也不允许用户取消订单,更改送餐地址等操作。
user_name:点餐人姓名
user_address_name:送餐人姓名
user_address_phone:送餐人电话
user_address_pos:送餐地址
userorder_name:外卖员姓名
userorder_phone:外卖员电话
order_time:订单时间
没有外键,用户看不到(如果有用户,)
user_id:方便用户查看,关联用户,添加索引
userorder_id:方便外卖员查看,关联外卖员,添加索引
十二餐厅订单记录表(历史记录)
一个订单有多条餐厅订单
order_shop_id:主键
order_id:订单id
order_shop_num:订单编号:
订单编号的作用是可以通过订单编号查询订单信息,还有一点就是这个编号生成都有一定规则,规则一般关联订单生成时间,生产批次,相关注册店铺,商品类别,还有可能关联国家。这里就只是记录,不考虑生成。
order_shop_name:店铺名
order_shop_discount:优惠价格
order_shop_price:总价
shop_id:方便店家查看
十三餐厅订单记录详情表(历史记录)
一个餐厅订单对应多条订单记录
order_shop_id:记录id
order_shop_detail_id:主键
order_shop_detail_fidname:菜品名
order_shop_detail_price:单价
order_shop_detail_num:数量
shop_car_detail_info:附件
十四菜品附件表(店家可以给菜品添加信息,方便用户点菜)
一个菜品有多个菜品附件
shop_food_enclosure_id:主键
shop_food_id:关联菜品,同时添加外键
food_code_id: 添加外键
shop_food_enclosure_value: 值(这个就不需要了,因为一个food_code_id既有key又有value)
十五系统菜品附件表
记录名和值的系统表类似java中的map。
这个表也不考虑维护了,就是直接用
food_code_id
food_code_name:姓名 例如辣
food_code_value:值 例如不添加 (理论上一个name可对应多个value,但是一个id只对应一个value)
十六菜品信息表(记录菜品的月销量,) 可以放到菜品表里面,这里只是显示一下
shop_food_info_id:主键
shop_food_id:外键
shop_food_info_num:销量
十七菜品评论表(历史记录表)
同样不维护了,只用
shop_food_report_id:主键
shop_food_username:评论人姓名
shop_food_content:评论内容
shop_food_id:关联菜品,可查询
十八外卖员表
只读,不操作
userorder_id:和login_id共享主键
userorder_name:真实姓名
userorder_iden:身份证
userorder_phone:电话
userorder_lng:当前经度
userorder_lat:当前纬度
userorder_statue:是否忙碌
总结:
1.当关联另一个表的字段时候,可以选择添加外键,这样可以方便我们操作。我们就不用手动删除,更新了。
2.先有关联关系,然后是外键关系,也有时候不需要添加外键,比如用户订单表,用户可查,外卖员也可查,添加外键不太合适
3.历史记录和动态记录,历史记录是冗余的信息,说明了不能改变,动态记录是动态变化的,不能添加历史记录。案例就是订单表和用户购物车详情表。
问题:
1.有些功能没有做,例如评论,都比较复杂
2.浏览器也并不能把所有操作都做了,比如订单状态改变,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)