Эффективное хранение позиций элементов (для упорядочения) в базе данных

Сценарий:

Существует база данных фильмов, принадлежащих пользователю, фильмы отображаются на странице под названием «мои фильмы», фильмы могут отображаться в том порядке, в котором они желает пользователь. Например, «Бойцовский клуб» в позиции №1, «Драйв» в позиции №3 и так далее и тому подобное.

Очевидным решением является сохранение позиции с каждым элементом, например:

movieid, userid, position
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3

Затем при выводе данные упорядочиваются по положению. Этот метод отлично работает для вывода, однако у него есть проблема при обновлении: положение элемента необходимо обновить всем остальным позициям, поскольку позиции являются относительными. Если фильм № 3 теперь находится на позиции № 2, то теперь фильм № 3 необходимо обновить до позиции № 2. Если база данных содержит 10 000 фильмов, и фильм перемещается с позиции №1 на позицию №9999, необходимо обновить почти 10 000 строк!

Мое единственное решение состоит в том, чтобы хранить позиционирование отдельно, вместо того, чтобы иметь отдельное поле для каждой позиции элементов, это просто один большой дамп данных о позициях, которые берутся во время выполнения и связаны с каждым элементом (json, xml, что угодно), но это кажется... неэффективным, потому что базу данных нельзя оставить для сортировки.

Мой обобщенный вопрос: Каков наиболее эффективный способ хранения позиций элементов в списке, удобный для выборки и обновления?

17
задан bjan 19 June 2012 в 08:12
поделиться