Лучший способ хранить упорядоченные списки в базе данных?
Каков наилучший способ хранения «упорядоченных списков»? в базе данных, так что их обновление (добавление, удаление и изменение порядка записей) легко сделать?
Рассмотрим базу данных, где у вас есть таблица для пользователей и фильмов. У каждого пользователя есть список любимых фильмов.
Поскольку многим пользователям может нравиться один и тот же фильм, я разделил таблицы пользователей и фильмы и использовал третью таблицу для их соединения - пользовательские фильмы.
usermovies содержит идентификатор пользователя, фильм и «номер заказа». Номер заказа используется для заказа списка фильмов для пользователей.
Например, пользователь Josh может иметь следующий список:
Prometheus Men in Black 3 The Dictatorи пользователь Джек может иметь список вроде:
The Dictator Prometheus Battleship Snow White and the HuntsmanТаким образом, они разделяют некоторые избранные, но не обязательно в том же порядке.
Я могу получить список идентификаторов фильмов для каждого пользователя, используя запрос:
SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
Затем с заказанными movie_ids я могу получить список фильмов, используя другой запрос
SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
Таким образом, запросы работают, но обновление списков кажется действительно сложным - существуют ли более эффективные способы хранения этой информации, чтобы было легко получить список фильмов для пользователя x, добавить фильмы, удалить их и изменить порядок списка?