保存行排序顺序的最佳方法
Posted
技术标签:
【中文标题】保存行排序顺序的最佳方法【英文标题】:Best way to save a sorting order for rows 【发布时间】:2020-10-21 20:10:29 【问题描述】:我有一个表格,其中的行具有特定的顺序。用户可以在排序的任何位置插入新行。
我们目前的策略是:
使用Integer
类型的名为“order_index”的列
行的“order_index”以 10000 分隔
插入新行时,在相邻行之间分配整数
如果行变得过于紧密(有一个分隔),则锁定并重新将“order_index”分配给所有行,递增 10000
这显然有点复杂,并且重新分配不是最佳的,因为它需要的时间比我们想要的要长。 有更好的方法吗?
【问题讨论】:
是否有任何索引/检索要求?我的想法最初是针对此类问题的链接列表,例如this。插入时间会很快,但检索时间可能会很慢。 @Garrett 这里需要更多的上下文来提供解决方案。你能解释一下你如何决定一个新的行应该位于开始和结束范围之间。例如,新行应该在 10000 到 20000 之间 您还没有指出用户如何指示行在序列中的位置,但是对于 order_index 使用数字而不是整数。最初的 2 行可以设置为任何所需的值。然后在插入时只平均 order_index 前一行和下一行以获得当前行的 order_index。 (注意:numeric 列在小数点后最多提供 16383 位数字,因此有足够的空间)。对于新的第一个或最后一个 order_index,添加或减去任何值。确切的过程是用户可以重新排序 order_index。 @JonWarren 一个链表可以解决这个问题,尽管我们首先尝试过,但数据从未保持原始状态(它以一些像循环一样的混乱结束)。 @SUMITPATRO 我们知道新行应该在哪一行之后。 【参考方案1】:如果使用浮点索引,中间总是有一个数字。
【讨论】:
我也是这么想的,但是意识到浮点数据类型实际上可以具有彼此最大程度接近的数字,并且它们之间没有选择(因为它们具有有限的精度)。以上是关于保存行排序顺序的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章