Похоже на идею @Джимми Чандры, но используйте один столбец ссылок.
Итак, у вас могут быть следующие столбцы:
ID | SortAfterID | OtherColumn1 | OtherColumn2
Теперь предположим, что у вас есть пять записей с идентификаторами от 1 до 5, и вы хотите, чтобы запись 5 была отсортирована между 2 и 3. Ваша таблица будет выглядеть примерно так:
ID | SortAfterID | OtherColumn1 | OtherColumn2
1 | NULL | ... | ...
2 | 1 | ... | ...
3 | 5 | ... | ...
4 | 3 | ... | ...
5 | 2 | ... | ...
Я бы установил ограничение, чтобы SortAfterID ссылался на идентификатор.
Если вы сейчас хотите вставить новую запись (ID = 6), которая идет между 1 и 2, вы бы:
- Вставить новую запись с ID = 6 и SortAfterID = 1.
- Обновить запись с ID = 2, чтобы SortAfterID = 6.
Я думаю, что это должно быть довольно простое обслуживание, и оно гарантированно сработает независимо от того, сколько раз вы набиваете. Идея чисел с плавающей точкой @richardtallent также должна работать, но, как он упомянул, вы можете столкнуться с ограничением.
EDIT
Я только что заметил абзац в конце ответа @richardtallent, в котором упоминается та же идея, но, поскольку я все это напечатал, я думаю, что я оставлю его здесь, поскольку он предоставляет немного дополнительной детализации.