2010-12-11 23 views
8

Tengo una galería de fotos. Quiero agregar el botón "Agregar a Favoritos" para que el usuario pueda agregar a otros usuarios a sus favoritos. Y luego quiero que cada usuario pueda ver su lista de usuarios favoritos, así como también poder ver quién (lista de usuarios) agregó este usuario a favoritos.mejor manera de almacenar los "favoritos" del usuario en MySQL

He encontrado dos maneras, y la primera es:

faver_id faved_id 
1  10 
1  31 
1  24 
10  1 
10  24 

no me gusta este método debido a 1) una gran cantidad de repetir 2) mesa muy grande en el futuro (si es un tener al menos 1001 usuarios , y a cada uno le gustan otros 1000 usuarios = 1 001 000 registros) lo cual supongo que ralentizará mi base.

La segunda forma es:

user_id favs 
1   1 23 34 56 87 23 
10   45 32 67 54 34 88 101 

puedo tomar estos favoritos y explotar() en php o buscar si el usuario le gusta algún otro usuario por MySQL consulta select count(user_id) from users where favs LIKE '% 23 %' and user_id=10;

pero siento la segunda vía no es muy "correcto" en términos de MySQL.

¿Me puede decir algo?

Respuesta

13

Piense en esto. Su argumento en contra del uso del primer enfoque es que sus tablas pueden llegar a ser demasiado grandes, pero luego continúa diciendo que si usa el segundo enfoque puede ejecutar una consulta comodín para buscar campos que contengan algo.

El segundo enfoque obliga a una búsqueda de tabla completa, y es indescifrable. Con la primera aproximación, solo aplica índices en cada una de sus columnas y está listo para continuar. El primer enfoque escala mucho, mucho, mucho mejor que el segundo. Dado que el escalado parece ser su única preocupación con el primero, creo que la respuesta es obvia.

Vaya con el primer enfoque. Las tablas de muchos a muchos se usan en todas partes, y por buenas razones.

Editar:

Otro problema es que el segundo enfoque es la entrega de una gran parte del trabajo en el mantenimiento de la base de datos fuera de la aplicación. Esto está bien en algunos casos, pero los casos de los que habla son cosas que la base de datos sobresale en. Solo estarías reinventando la rueda, y mal.

+0

Muchas gracias por una explicación tan clara. Sí, olvidé que puedo agregar el índice de la tabla en el primer caso y que resolverá el problema con miles de registros. – oyatek

+0

@oyatek: No hay problema. Estoy feliz de ayudar – AgentConundrum

1

Bueno, la segunda forma no es tan fácil cuando quieres eliminar o hacer cambios, pero está bien en términos de MySQL. Aunque, Joomla incluso incluye una fecha diferente de información en el mismo campo llamado params.

1

Definitivamente vaya con la primera manera.

Cuestiones relacionadas