¿Cuál es la mejor manera de almacenar "listas ordenadas" en una base de datos, de manera que actualizarlas (agregar, eliminar y cambiar el orden de las entradas) se hace fácilmente?¿La mejor manera de almacenar listas ordenadas en una base de datos?
Considere una base de datos donde tenga una tabla para usuarios y películas. Cada usuario tiene una lista de películas favoritas.
Dado que a muchos usuarios les puede gustar la misma película, hice de los usuarios y las películas tablas separadas y utilizo una tercera tabla para conectarlos, usermovies.
usermovies contiene una identificación de un usuario y una película y un "número de orden". El número de orden se utiliza para ordenar la lista de películas para los usuarios.
Por ejemplo, el usuario Josh tenga la siguiente lista:
- Prometeo
- Hombres de Negro 3
- El Dictador
y el usuario Jack podría tener una lista como:
- The Dictator
- Prometeo
- acorazado
- Snow White and the Huntsman
Por lo tanto, comparten algunos de los favoritos, pero no necesariamente en el mismo orden.
puedo obtener la lista de ID de película para cada usuario mediante una consulta:
SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
Luego, con los movie_ids ordenados, puedo obtener la lista de películas usando otra consulta
SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
Así que las consultas funcionan, pero la actualización de las listas parece realmente compleja ahora: ¿hay mejores formas de almacenar esta información para que sea más fácil obtener la lista de películas para el usuario x, agregar películas, eliminarlas y cambiar el orden de la lista?
para obtener todas las películas para un usuario podría utilizar un consulta única como esta: 'SELECT nombre FROM películas INNER JOIN usermovie ON usermovie.movie_id = movies.id AND usermovie.user_id =? PEDIDO POR usermovie.order_number'. Y no veo lo que es difícil con el enfoque actual? Para agregar una película a un usuario, simplemente inserte una nueva entrada en su tabla de enlaces y para eliminarla, elimine la entrada. – Cyclonecode
gracias! Eso será útil, aunque mi verdadero problema aquí es la actualización. – wannabeartist