Estoy buscando diseñar una base de datos para un sitio web donde los usuarios puedan obtener puntos (reputación) para realizar ciertas actividades y estoy luchando con el diseño de la base de datos.¿Cuál es la mejor manera de almacenar/calcular los puntajes de los usuarios?
Estoy planeando mantener registros de las cosas que hace un usuario para que puedan tener 25 puntos para un artículo que han enviado, 1 punto cada uno por 30 comentarios que han hecho y otros 10 puntos de bonificación por ser increíble!
Está claro que todos los datos estarán allí, pero parece que es mucho o complicado obtener el puntaje total de cada usuario que me gustaría mostrar junto a su nombre de usuario (en forma de un nivel). Por ejemplo, una consulta a la tabla de elementos enviados para obtener los puntajes de cada elemento de ese usuario, una consulta a la tabla de comentarios, etc. Si todo esto tiene que hacerse para cada usuario mencionado en una página ... MUCHAS consultas !
Había considerado mantener un puntaje en la tabla de usuarios, lo que parecería mucho más rápido de buscar, pero me han convencido de que almacenar datos que se pueden calcular a partir de otros datos es ¡MALO!
He visto una gran cantidad de sitios que hacen cosas similares (incluso el desbordamiento de pila hace algo similar), así que creo que debe haber una "mejor práctica" a seguir. ¿Alguien puede sugerir cuál puede ser?
Cualquier sugerencia o comentario sería genial. ¡Gracias!
Lo siento, soy tonto, no noté el aspecto de mysql. No creo que tenga vistas indexadas todavía. La alternativa normal para obligarlo a mantenerse sincronizado es configurar los desencadenantes. – ahains
Los gatillos hacen llorar al bebé Jesús. Bueno, me hacen llorar, de todos modos. Incluso si no está indexado, una vista es tu amigo aquí. – Adrien