Cómo crear un objeto en MySQL que es un conjunto de otro objeto

No intente modelar “listas” en MySQL (o cualquier base de datos relacional). Algunas bases de datos relacionales tienen tipos de matriz, pero estas no son realmente útiles para almacenar listas arbitrarias, particularmente si están involucradas claves externas.

La estructura de datos preferida para este tipo de cosas serían las tablas apropiadas y el uso de Join (SQL).

La forma en que modelaría esto sería averiguar qué relación está tratando de modelar con la “lista” y modelar la relación utilizando identificadores en lugar de listas. Digamos, por ejemplo, que tiene un grupo de usuarios y cada uno el usuario tiene una lista de películas favoritas. Esta es una relación de uno a muchos, y una forma de modelar esto es con tres tablas:

crear usuario de tabla (
user_name varchar (50) único,
user_id int auto_increment,
clave primaria (user_id)
);

crear películas de mesa (
movie_name varchar (50) único,
movie_id int auto_increment,
clave principal (movie_id)
);

crear tabla favorite_movies (
user_id int,
movie_id int,
clave primaria (user_id, movie_id),
la clave externa (user_id) hace referencia al usuario (user_id)
);

“favorite_movies” es la tabla que almacena la lista de películas favoritas de cada usuario.

Para obtener los favoritos de un usuario, puede hacer una unión como

seleccione m.movie_name
de películas m,
usuarios u,
películas favoritas f
donde u.user_name = ‘Greg’
y f.user_id = u.user_id
y m.movie_id = f.movie_id;

Si desea permitir que cada usuario tenga una colección de listas de películas, como una lista de “lista de favoritos” y “No me gustan”, puede modelarla con una pequeña adición a la tabla “favorite_movies” y la combinación (y un cambio en el nombre de la tabla).

(Tenga en cuenta que la “lista de películas favoritas” no es realmente una lista ya que no está ordenada, pero puede agregar un campo de clasificación a la tabla favorite_movies y ordenar por ella para ordenar las películas).