【发布时间】: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 我们知道新行应该在哪一行之后。
标签: sql postgresql