重新排序 sql 数据库中的行 - 想法
Reordering rows in sql database - idea
我正在考虑在关系数据库 table 中对行进行简单的重新排序。
我想避免这里描述的方法:
How can I reorder rows in sql database
我的简单想法是使用双精度 64 位 IEEE 754 浮点类型的 ListOrder 列。
在两个现有行之间插入一行时,我们将 listOrder 值计算为这些同级元素的平均值。
示例:
1。起始状态:
value, listOrder
a 1
b 2
c 3
d 4
e 5
f 6
2。向上移动 "e" 两行
一个简单的 sql 电子行更新:update mytable set listorder=2.5 where value='e'
value, listOrder
a 1
b 2
e 2.5
c 3
d 4
f 6
3。向下移动 "a" 一个位置
value, listOrder
b 2
a 2.25
e 2.5
c 3
d 4
f 6
我有一个问题。我可以执行多少次插入(在边缘情况下)以获得正确排序的列表。
对于 64 位整数,同一位置的插入次数少于 64 次。
浮点类型是否允许更多插入?
描述的方法还有其他问题吗?
您是否看到任何 patches/adjustments 可以使这个想法在应用程序中安全和可用?
这类似于词法顺序,也可以用 varchar 列来完成:
A
B
C
D
E
F
变成
A
B
BM
C
D
F
变成
B
BF
BM
C
D
F
我更喜欢两步过程,您可以在移动的行之后更新 table 中的每一行,使其变大。 Sql 对此很有效,在更改后更新行并不像看起来那么糟糕。您保留了一些更易读的东西,您的序数值的存储大小与您的数据大小成线性比例关系,并且您不会冒险达到您没有足够的精度将项目放在两个之间的地步值
我正在考虑在关系数据库 table 中对行进行简单的重新排序。 我想避免这里描述的方法: How can I reorder rows in sql database
我的简单想法是使用双精度 64 位 IEEE 754 浮点类型的 ListOrder 列。 在两个现有行之间插入一行时,我们将 listOrder 值计算为这些同级元素的平均值。
示例:
1。起始状态:
value, listOrder
a 1
b 2
c 3
d 4
e 5
f 6
2。向上移动 "e" 两行
一个简单的 sql 电子行更新:update mytable set listorder=2.5 where value='e'
value, listOrder
a 1
b 2
e 2.5
c 3
d 4
f 6
3。向下移动 "a" 一个位置
value, listOrder
b 2
a 2.25
e 2.5
c 3
d 4
f 6
我有一个问题。我可以执行多少次插入(在边缘情况下)以获得正确排序的列表。
对于 64 位整数,同一位置的插入次数少于 64 次。
浮点类型是否允许更多插入?
描述的方法还有其他问题吗? 您是否看到任何 patches/adjustments 可以使这个想法在应用程序中安全和可用?
这类似于词法顺序,也可以用 varchar 列来完成:
A B C D E F
变成
A B BM C D F
变成
B BF BM C D F
我更喜欢两步过程,您可以在移动的行之后更新 table 中的每一行,使其变大。 Sql 对此很有效,在更改后更新行并不像看起来那么糟糕。您保留了一些更易读的东西,您的序数值的存储大小与您的数据大小成线性比例关系,并且您不会冒险达到您没有足够的精度将项目放在两个之间的地步值