Как лучше всего хранить "упорядоченные списки" в базе данных, чтобы их можно было легко обновлять (добавлять, удалять и изменять порядок записей)?
Рассмотрим базу данных, в которой у вас есть таблица для пользователей и фильмов. У каждого пользователя есть список любимых фильмов.
Поскольку многим пользователям может понравиться один и тот же фильм, я заставил пользователей и фильмы разделить таблицы и использовать третью таблицу для их подключения, usermovies.
usermovies содержит идентификатор пользователя и фильма и "номер заказа". Номер заказа используется для заказа списка фильмов для пользователей.
Например, пользователь Josh может иметь следующий список:
- Prometheus
- Мужчины в черном 3
- Диктатор
и пользователь Jack может иметь список вроде:
- Диктатор
- Prometheus
- Броненосец
- Белоснежка и охотник
Итак, у них есть несколько избранных, но необязательно в том же порядке.
Я могу получить список идентификаторов фильмов для каждого пользователя с помощью запроса:
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, добавить фильмы, удалить их и изменить порядок список?