Изменение порядка строк в базе данных SQL - идея
Я думал о простом переупорядочении строк в таблице реляционной базы данных. Я хотел бы избежать метода, описанного здесь: Как я могу изменить порядок строк в базе данных SQL
Моя простая идея заключалась в том, чтобы использовать в качестве столбца ListOrder тип 64-битной плавающей запятой IEEE 754 с двойной точностью. Вставляя строку между двумя существующими строками, мы вычисляем значение listOrder как среднее значение этих элементов-братьев.
Пример:
1. Исходное состояние:
value, listOrder
a 1
b 2
c 3
d 4
e 5
f 6
2. Перемещение "е" на два ряда вверх
Одно простое обновление 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. Перемещение на одну позицию вниз
value, listOrder
b 2
a 2.25
e 2.5
c 3
d 4
f 6
У меня вопрос. Сколько вставок я могу выполнить (в крайнем положении), чтобы получить правильно упорядоченный список.
Для 64-битного целого числа в одном месте менее 64 вставок. Разве типы с плавающей точкой позволяют больше вставок?
Есть другие проблемы с описанным подходом? Видите ли вы какие-либо исправления / корректировки, чтобы сделать эту идею безопасной и пригодной для использования в приложениях?
1 ответ
Это похоже на лексический порядок, который также можно сделать с колонками varchar:
В С D Е F
становится
В BM С D F
становится
В BF BM С D F
Я предпочитаю двухэтапный процесс, когда вы обновляете каждую строку в таблице после той, которую вы перемещаете, чтобы она была больше. Sql эффективен в этом, когда обновление строк после изменения не так плохо, как кажется. Вы сохраняете что-то, что будет более читабельным для человека, размер хранилища для ваших порядковых значений масштабируется линейно, а не по размеру ваших данных, и вы не рискуете прийти к точке, где вам не хватает точности, чтобы поместить элемент между двумя ценности