排序后的状态如何在后端保存
这里只是介绍下常规的存储解决方案.很多前端都支持排序,如可拖动的,如排序的表格等.前端有很多组件如Jquery插件等,这里不介绍怎么使用了.
如上图,通常来说数据结构为:
[
{id:1 ,name:"task1" },
{id:2 ,name:"task2" },
{id:3 ,name:"task3" },
]
(交换1和3)排序以后可能变为:
[
{id:3 ,name:"task3" },
{id:2 ,name:"task2" },
{id:1 ,name:"task1" },
]
注:(交换1和3需要拖动2次哦)
这里分2种情况,
第1种是直接保存所有排序结果
第2种是分步保存排序结果
方案一: 一次性保存排序结果
适合小表.
假设后端数据库原先是这样保存的:
ID | Name |
3 | task3 |
2 | task2 |
1 | task1 |
添加一个字段就可以实现有序态
ID | Name | Order |
3 | task3 | 1 |
2 | task2 | 2 |
1 | task1 | 3 |
Order字段需要前端js自动处理好发送到端.
后果: 这样做的话,每次排序后端都要改所有行! 没错,所有相关行,
如果是大表,如有几千行的数据肯定不应该这样做排序.
方案二:分步保存排序结果
适合:需要手动排序表
可拖动的列表最好使用分步保存排序.
这需要在后端加2个字段
ID | Name | Before | after |
3 | task3 | 2 | null |
2 | task2 | 1 | 3 |
1 | task1 | null | 2 |
每次拖动都把拖动的一行结果发给后端
方案三:大表的排序保存
大表的排序应该单独加一个排序状态表.这适合表格排序后保存状态.
ID | Name | SortTypeId |
3 | task3 | 1 |
2 | task2 | 1 |
1 | task1 | 1 |
这里指定排序类型的ID
SortTypeID | SortValue | desc |
1 | 3,2,1 | 张三的排序 |
2 | 1,4,5,6,7,100,200 | 省份排序 |
前端每次把排序的结果发送给后端就O了.
很显然这不适合超大表.
对比
排序状态保存的方案还有很多,多注意跟前后端耦合.不管什么方案前后端新增的工作量都很大.
分步保存对后端最友好,后端压力最小(多用户操作)
小表一次性保存对前后端都友好(主要是取数据后分析数据方便,不适合多用户)
大表一次性保存对前后端都不友好,因为要解析”3,2,1”这类字符串.
如果不是滋滋必较用大表方案就行了.
有现成的框架么?