Web开发那点事:数据库设计,用户删除或修改了数据怎么办?

在我们实际的应用环境中,这个问题是绝对会面对的,当然我也不例外,举几个例子描述一下问题场景。

1、电商项目常遇到的商品信息,用户购买了一个商品,完成一次购物体验,这个时间,我们涉及到几个环节,选择商品、下单、支付、完成、评价,或者还有其它的状态环节;在这个环节中,大部分开发者都是使用的商器ID(自动编号或生成的唯一编号)在订单系统中,这个时候如果商品管理者更改或删除了商品都会导致流程中断及出错;特别是用户已购买成功后,修改了商品信息,那么这时候依赖说商品的ID的数据都全部变了。

2、用户的收货信息,用户在购物过程中会选择地址,绝大部分系统的设计也与商品订单一样,都是关联的地址的一个ID,如果用户一但在这个过程中修改或删除了地址信息,都会导致业务的中断或数据出错。

3、等其他类似的数据;

通过以上的场景我们可以发现,所有应用于这种场景的数据都会出现问题,并且更不可能再以这样的思路去去设计系统,不然导致的问题不是一点二点的;特别是已按这样的设计出来的系统已应用于市场了,如果在来进行升级开发还是需要很大的成本与时间的。

我们先来定义一下数据:

用户数据:用户可以自由编辑、删除,而不会影响到其它的任何已使用的场景;比如:商家的商品,在任何时候可以进行编辑、删除、上下架;用户自己的地址

业务数据:在业务场景中需要用到的数据,一但生成业务了原则上用户不能在进行编辑、删除;不然会导致最终的业务出错;比如:商家的商品数据,不管商家怎么编辑、删除而不影响现在已购买用户的数据,用户的地址编辑、删除后而不影响订单里面的收货地址等信息;

那这样的情景在现有的系统中大家都是怎么处理的呢这样子的问题的呢。

如果已是这样设计的,那么不允许进行编辑、删除操作;如果一定要删除呢,那也只能是逻辑删除而不是物理删除,这样保持数据的完整性,从而不影响业务。

那究竟我们应该怎么做设计才能解决上面所面临的问题呢?接下来我们回到问题的本身:要保证数据在已形成的业务流程中是完整的,不会被删除与修改;而用户对自己的数据可以任意的修改与删除还不会影响已形成的业务。

下面我说说我们在系统中的解决方案;

1、用户数据与业务数据独立存储;

2、业务数据能复用,减少不必要的冗余;

实施方式:

同样以商品为例。1、下单的时候,我们把数据存放在一个独立的业务数据表中,从而与用户数据分开(拷贝用户数据);在引用的商品ID变成业务数据表的ID;

2、使用MD5进行数据签名,以方便另外的用户在购买同一个商品的时候,还是可以直接引用业务数据表中的ID,特别是如果还有更多的商家卖的是同一个商品时,或者其它场景也会需要相同业务数据时,还可以直接复用这个表中的数据,从而减少不需要的数据冗余

3、通过以上操作后,我们就不用在担心原始数据编辑与删除了;我相信这样子的系统将是更健壮、稳定的了。

PS:建议大家在做系统设计的时候,最先要想的是,如果这个数据被编辑或删除后会影响业务吧。有了这个想法后自然就会引申到怎么去解决这个问题的技术方案上了。加油,如果你有更好的方法请与我联系。

当然,以上也只是使用数据库的方式来处理存储业务数据的,也可以使用文件系统,比如:静态文件、JSON文件,建议以md5后的字符串作为文件名称,想想为什么?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值