|循环类业务处理的「增、删、改、查」( 二 )


|循环类业务处理的「增、删、改、查」
本文插图

3. 『改』:实例和重塑更新
对于循环类的事务 , 更新的方式主要是两类:仅更新当前 , 更新当前及后续 。
仅更新当前:在循环体中的某一时间点 , 仅需要更新当前的情况 。 例如:用户制定了一个每周二循环的事务清单 , 在第3次执行时 , 当天事务繁多 , 此清单想删掉其中一条事务 , 但是后面的暂时不想更改 , 那就需要更新当前 。
因为有些数据点是虚拟的 , 所以在进行更新当前时 , 就需要将其进行实例化 , 也就是新增一条 , 时间归属于当前时间点的业务数据 。 这也就是上文提到的逻辑上判定 , 在实际展示这一时间点的数据时 , 仅展示这一实例化的点即可 。
我们可以把循环事务想象为一个点 , 通过循环规则 , 它演变为一段线段 。 在循环中途对循环业务进行的操作 , 都是对线段的操作 。
|循环类业务处理的「增、删、改、查」
本文插图

更新当前及后续:从当前点开始 , 后面的循环内容发生了改变 。 这种就需要对于循环做新增 , 正所谓“一刀两段” 。 新产生的循环就是重塑的循环 。
|循环类业务处理的「增、删、改、查」
本文插图

4. 『删』:“反常态”操作
正常的业务在进行删除时 , 不是进行数据的移除 , 就是进行数据的假删处理 , 数据不会出现因为【删除】反而增加的情况 , 但是对于『循环』的业务可能就要区别对待了 。
循环事务的删除和它的更改一样 , 也是具备两项操作:仅删除当前 , 删除当前及后续 。
删除当前及后续:这个很直白 , 就是从某一处开始 , 直接截断“扔掉” 。
但是 , 【仅删除当前】可就不好操作了 。 可能有人会想到删除当前 , 直接在线段上“一刀两段”把那个特殊点扔掉即可 。 我们假设这种方式叫截断,看下截断方式带来的实际业务变化 。
|循环类业务处理的「增、删、改、查」
本文插图

看样子 , 采用截断的方式 , 再进行更新操作也不会有啥影响 。 那假如把一段循环 , 在中途删掉两个点 。 例如:从1月1日到1月10日每天循环的计划 , 3日和5日因为休息 , 不必执行了 。
|循环类业务处理的「增、删、改、查」
本文插图

当删掉了1月3日和1月5日的事务后 , 然后把1月4号也删掉 , 再回到1月2号想调整下循环事务内容时 , 会发现6号到10号的循环事务内容不跟随变化了 。 这也违背了上述『查』的展示页优化 。
而如果采用【补点】的方式 , 也就是删除单点时 , 加一个覆盖点 , 用于遮盖 。
|循环类业务处理的「增、删、改、查」
本文插图

上述的问题也就不存在了 , 但是这也造成了一个问题 , 明明是【删除】操作 , 结果数据库里的数据反而增多了 , 资源空间占用更多了 。
这时就可以用到递归优化 , 在处理具体循环事务时 , 判定是否为唯一点 , 若是直接进行数据清除 。 对于有子集的则递归化处理 , 以来减少资源空间浪费 。
|循环类业务处理的「增、删、改、查」
本文插图

五、总结
循环类事务 , 难点在于对于数据的处理上 。 理清楚具体业务的实际场景 , 以来定夺具体采用的处理方式 。
上述是一个通式 , 部分也是个例 。 若是想完美解决 , 就要理清线段和点的关系 , 这里不再赘述 。
本文由 @29号同学 原创发布于人人都是产品经理 , 未经许可 , 禁止转载


推荐阅读