【问题标题】: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 我们知道新行应该在哪一行之后。

标签: sql postgresql


【解决方案1】:

如果使用浮点索引,中间总是有一个数字。

【讨论】:

  • 我也是这么想的,但是意识到浮点数据类型实际上可以具有彼此最大程度接近的数字,并且它们之间没有选择(因为它们具有有限的精度)。
猜你喜欢
  • 2012-11-30
  • 2012-07-15
  • 2011-02-19
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2023-03-29
  • 2020-04-28
相关资源
最近更新 更多