Тема: Цікава (сяк-так) задача. Довільно впорядкований список з SQL
Є набір сутностей, які користувач має впорядковувати, як хоче. Як зберігати такий список в SQL?
Популярний (в CMS) варіант, де пропонується виставляти порядок числами, мені видається дуже незручним. Як це можна оптимізувати?
Якби мова йшла не за БД, то тут оптимальним рішенням був би список; але структура, де кожен запис посилається на інший, засобами SQL витягається не дуже зручно.
Мені вбачається таке рішення:
1. Кожному елементу надається особистий номер (з певним кроком, скажімо, 16), тобто:
Елемент1 0
Елемент2 16
Елемент3 32
Елемент4 48
і т.д.
2. Користувачу номери не показуються; він може перетягати елемент, як завгодно. Коли елемент перетягається між двох інших, його номер змінюється на середнє арифметичне їхніх номерів:
Елемент1 0
Елемент4 8 < вставили між 1 та 3
Елемент2 16
Елемент3 32
Особливі випадки - пересування в початок і кінець списку - обробляються особливо, скажімо, відкиданням на 16 від попереднього краю (в т.ч. у від'ємні). Або ж вважається, що існують умовні номери 0 і 16*(кількість елементів), які завжди стоять на краях.
3. Якщо таке перетягування стає неможливим, бо номери, між якими додають елемент, сусідні, запускається процедура перенумерації. Наприклад, весь список отримує нові номери з кроком 16, або ж обчислюється певний окіл елементів, де номери розташовані надто щільно, і перенумерація відбувається тільки в ньому.
В принципі, нескладно, але мені чомусь здається, що тут може бути простіше рішення, до якого я чомусь не можу дійти.