Мы используем Django.
У нас есть модельный объект Story, который имеет N объектов Section, упорядоченных по настраиваемому полю «index».Это отражается в базе данных как таблица разделов, имеющая столбец «index» и столбец «story_id».
Когда добавляется новый раздел, мы просто создаем его с новым «index», который является максимальным.
Пока все хорошо.
Проблема в том, что мы хотим вставить раздел, который будет упорядочен между двумя уже существующими разделами.Как эффективно добавить новую запись Раздела, но расположить ее между двумя индексами?
Допустим, у нас есть Раздел с идентификатором A и индексом 1. И Раздел с идентификатором B и индексом 2. Я хочу добавитьИдентификатор секции C, но с индексом от 1 до 2, чтобы убедиться, что он находится между A и B.
Предусмотренное нами решение:
- Используйте целочисленные индексы, при вставке раздела просто обновляйте индексыиз всех следующих разделов для того же идентификатора истории.Выглядит, может быть, немного излишне, я не знаю.
- Используйте индексы с плавающей запятой, при вставке Раздела просто создайте новый индекс, который находится между предыдущим и следующим индексом, как 0,5 для Раздела между индексом Раздела 1и 2. Может быть, полон сюрпризов, поэтому я не уверен, но самое простое решение для реализации.
- Удалите поле индекса и просто убедитесь, что каждый раздел знает следующий идентификатор раздела (и, возможно, предыдущийИдентификатор раздела тоже).Работает как связанный список, поэтому вставка проста и эффективна, НО, как же тогда получить упорядоченный список Раздела?На данный момент мы понятия не имеем ...
Как бы это был хороший способ сделать это?