一个需求 如果你一开始的出发点就错了,那么后续的设计只会非常复杂,而且还会有漏洞,也很难发现,发现了也很难解决。
先看数据结构:
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然后去重组合各种玩法就复杂了。
这题可以思考下。