无法到达的快递地址 一次偷懒表设计带来的惨痛教训

前段时间,商城在做促销活动的时候,我们的测试人员也买了一些商品,但是时隔多天一直没有收到快递,很是纳闷。经过开发同学的确认,该订单的邮递地址为:北京市火星区xxx,电话号码15555555555,这显然不是一个合理的邮寄地址。由于之前确认过线上并不存在SQL注入的可能性,因此只可能是线上的正常流程影响了订单的邮寄地址。在Check线上流程的时候,发现一个巨大的bug,这个bug看似平淡无奇,但实际上影响范围很大。

这里我们简单说一下,商城建立的初期,只有添加用户常用地址的功能,并没有删除和更改地址的功能,也就是说,地址一旦被添加后,则这个地址的id、地址信息都是只读的、不变的,因而当时为了节约空间,直接在订单中引用了用户地址的id号,作为用户提交订单时地址的快照,也就是说,数据库表是这样的结构:

问题就出在这里!

随着商城的优化,产品MM觉得对于用户的常用地址,编辑和删除应该是正常的操作,而由于中间隔了大约一个月的时间,因此在添加此功能的时候,完全忘记了用户的订单是使用的是用户地址的id来关联的,这时就带来一个很大的问题:用户可能一时糊涂(或者新奇),把自己的地址改成一个并不存在的地址,这样实际上也就隐式的修改了订单的地址!这样的设计,当然是错误的。

知道了原因,也就知道了解决方案:那就是在生成订单的时候,并不是简单的保存地址的id,而应该记录当时地址的快照信息。为了尽量减少订单表的大小,专门抽出一个单独的表order_addr记录订单的地址信息。这样在查找订单信息时,不必要的地址信息不会拖慢整个订单表查询,而在需要查找地址信息时,只需简单的join查询即可。

现在的表实际上是这样的关联关系:

这样修改过后,用户对常用地址的修改,删除等都不会影响订单的状态了。

有时候看似很简单的问题,可能有着很多潜在的陷阱,这个问题也警示我们:越是简单的问题,越不能掉以轻心,全方位思考应该是我们做任何事情应该养成的良好习惯。

mysql 收货地址表,没法到达的快递地址 一次偷懒表设计带来的惨痛教训相关推荐

  1. mysql收货地址表_收货地址表结构 以及创建修改流程

    创建收货地址的过程中, 一共涉及到三张表 一张为PostalAddress  contact_mech    party_contact_mech 创建的流程  调用createPartyPostal ...

  2. mysql收货地址表_企业内容管理系统-收货地址表 - 数据库设计 - 数据库表结构 - 果创云...

    -- 数据库大全:企业内容管理系统-收货地址表 -- 来源:YesApi.cn CREATE TABLE `yesapi_ey_shop_address` ( `id` bigint(20) unsi ...

  3. SAP MM 公司间STO发货单输出报错 - 合并工厂AUC1和存储位置6002没有货物收货地点 - 之对策

    SAP MM 公司间STO发货单输出报错 - 合并工厂AUC1和存储位置6002没有货物收货地点 - 之对策 昨天收到客户业务部门报错,说是业务对交货单0080022298做POD失败.相关交货单的输 ...

  4. 快递地址写错了怎么办?快宝地址清洗(PHP示例)

    快递地址写错了怎么办?快递地址写的不详细怎么办?快宝地址清洗,有效的解决了寄送快递时,批量录入收件人信息.发件人信息时,纠正地址数据,不完整地址识别,地址信息不完整时补全,已经合并区县的地址更正为最新 ...

  5. 新零售系统mysql设计(会员等级表 客户表 收货地址表)二次修改

    作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 sql 会员等级表 数据 客户表 数据 收货地址表 数据 会员等级表(解析) 字段解析: 类型大小 ...

  6. 零售商贩mysql表设计:收货地址表 用户表(关联起来)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 sql sql 收货地址表: CREATE TABLE `user_address` (`id` int(11) NOT N ...

  7. 商品属性对应表,商品相册表,用户表,用户收货地址表,地区表,购物车表,送货方式表,订单表,订单明细表的数据库设计

    商品的属性 通用属性: 名称 价格 图片 存放goods表 扩展属性,也叫规格参数,不同类型的商品其规格参数是不一样的,服装有尺码,颜色,材料等,手机有分辨率,内存,存储,摄像头,书籍有作者,出版社 ...

  8. 收货地址 - 需求分析与表设计

    用户在确认订单页面,可以针对收货地址做如下操作: 1. 查询用户的所有收货地址列表 2. 新增收货地址 3. 删除收货地址 4. 修改收货地址 5. 设置默认地址

  9. 美多商城之用户中心(收货地址1)

    三.收货地址 用户地址的主要业务逻辑有: 展示省市区数据 用户地址的增删改查处理 设置默认地址 设置地址标题 3.1 省市区三级联动 1. 展示收货地址界面 提示: 省市区数据是在收货地址界面展示的, ...

最新文章

  1. 服务器是计算机的一种 是指,pc服务器是指什么意思
  2. python中用socket检测端口_python基于socket函数实现端口扫描
  3. 平方剩余(例题+详解+代码模板)
  4. openssh8.6升级修复(CVE-2020-15778)(CVE-2018-15919)(CVE-2017-15906)等漏洞
  5. nginx php 源码安装,Nginx和php安装及配置一之编译安装nginx-1.8.0
  6. iOS-给Category添加属性
  7. 如何证明CPU的乱序执行(Out-of-order Execution)?
  8. 湘教云实名服务平台怎样认证_【i通知】小贝喊你来校园一卡通微信支付实名认证!...
  9. VALSE学习(六):机器学习中的标记分布与标记增强
  10. 30.yii2 --- 全文检索简介
  11. 敏感词过滤golang
  12. 基于波动率的期权交易策略分析
  13. 基于lis3dh的简易倾角仪c源码_轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 — 业务分析...
  14. 2E07-view-lists-Collapsed
  15. 20分钟让你了解OpenGL——OpenGL全流程详细解读
  16. webpy中如何返回json格式给前端
  17. MacOS Big Sur Beta 测评|使用体验|有哪些BUG?|如何安装?|实际体验如何?|WWDC2020
  18. 联邦学习开源框架FATE
  19. 接入层、汇聚层和核心层交换机
  20. 帝国cms如何导入php模板,帝国cms模板导入导出及模板组功能介绍

热门文章

  1. CAD-VBA标注对象创建
  2. 建筑施工图纸 各种方位图识别
  3. 任务栏上的语言栏没有了
  4. c和e语言,e-c c-e(英汉语言对比).ppt
  5. Java基础了解-12-网络编程/发送邮件/多线程编程/Applet 基础/文档注释
  6. OUTLOOK如何将几百个联系人添加到联系人组里面(不用一个一个添加),这里有妙招
  7. limit的使用——分页显示
  8. android 2.0 qq同步,QQ同步助手Android2.0版发布:覆盖五大平台
  9. 黑龙江省2017年执业药师考试准考证打印时间
  10. 站在科技和人文的路口,苹果带来了史上最便宜的发布会