排序后的状态如何在后端保存

这里只是介绍下常规的存储解决方案.很多前端都支持排序,如可拖动的,如排序的表格等.前端有很多组件如Jquery插件等,这里不介绍怎么使用了.

java 后端实现拖拽排序_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”这类字符串.
如果不是滋滋必较用大表方案就行了.
有现成的框架么?