从一个需求看问题的无限复杂化和简单化

一个需求 如果你一开始的出发点就错了,那么后续的设计只会非常复杂,而且还会有漏洞,也很难发现,发现了也很难解决。

先看数据结构:

A表 主键id   其他各种字段不重要  ,重要的就一个字段sort字段

aid1   sort=1

aid2   sort=1

---------------------

B表  A的关联表 存A的id   还有就是C表的id

aid1   cid1

aid2   cid2

-------------------

C表  某种数据

cid1

cid2

------------------

需求是:A表的sort在同一个cid下必须唯一

也就是某个sort例如是1被aid1和aid2占用,但是由于在B表他们是关联不同的cid所以没事,如果是同一个cid就不允许。

也就是你入库的新增更新的时候要check.这个比较简单,新增的cids和B表同sort关联的cids比较 只要不一样就行 ,只要有交集就返回false

Collections.disjoint

这里需要注意就是 你更新的时候 由于sort不变那么显然是要允许的,这是自己和自己比较,这个时候要看新管理的B表我新增的cid有没有被占用

最简单的做法是拿sort在A表查aid ,然后拿aids在B表查一个List<B>

再对List<B>遍历,如果aid=更新的aid那么忽略 说明是自己

如果不是  那么看cid=更新的时候传递的cid,只要有命中那么说明就有重复的  就返回false

将更新的cids转为一个set就行了。

这个问题 如果不是这样做的 尝试其他办法组建各种list然后去重组合各种玩法就复杂了。

这题可以思考下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值