用户自定义排序的几种实现思路

场景

每个用户,有多个分组
每个分组在页面展示,而且是有顺序的,这个顺序是由用户决定

以下是关于多种情况下的库表设计思路:

情景一:如果每改一次,就要实时修改库,而且用户可以任意修改顺序,比如5个分组,由54321改为51432

方案1:

用户表,用一个字段存分组表的顺序,比如(1分组Id,2分组Id,3分组Id)
分组表
每次用户修改顺序,只改用户表的这个字段。
查询的时候查出该用户所有分组,按照这个字段排序输出到前端。

方案2:分组表,每个分组加一个权重字段

每次用户修改顺序,对应修改所有分组的这个权重字段(有事务)
查询按照这个权重字段排序即可

方案3:链表思想,每个分组都有一个值,还存有上一个值和下一个值,比如5个分组12345

那么1分组存值1,上一个值null,下一个值2
那么2分组存值2,上一个值1,下一个值3
那么3分组存值3,上一个值2,下一个值4
那么4分组存值4,上一个值3,下一个值5
那么5分组存值5,上一个值4,下一个值null

这时如果要把顺序12345改成14325,只需要
1分组存值1,上一个值null,下一个值2
那么4分组存值4,上一个权重值1,下一个值3
那么3分组存值3,上一个值4,下一个值2
那么2分组存值4,上一个值3,下一个值5
那么5分组存值5,上一个值4,下一个值null

情景一总结:

方案1,要借助用户表来存储分组顺序,而这个属于业务字段,存在用户表中不合适
方案2,有事务,必须多个分组的修改同时成功
方案3,多了3个字段,而且和链表一样,增删改快,查询慢。适合部分小的场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值