He estado navegando este sitio para la respuesta, pero todavía estoy un poco inseguro cómo planificar un sistema similar en su estructura y aplicación de base de datos.Logros/sistema Placas
En PHP y MySQL estaría claro que algunos logros se obtienen inmediatamente (cuando se toma una acción especializada, en el caso SO: llenó todos los campos de perfil), aunque sé SO actualizaciones y asigna insignias después de una cierta cantidad de hora. Con tantos usuarios & insignias ¿no sería esto crear problemas de rendimiento (en términos de escala: alto número de usuarios de ambos & insignias).
Así que la estructura de la base Asumo haría algo tan simple como:
Badges | Badges_User | User
----------------------------------------------
bd_id | bd_id | user_id
bd_name | user_id | etc
bd_desc | assigned(bool) |
| assigned_at |
Pero como algunas personas han dicho que sería mejor tener un enfoque de estilo incrementales por lo que un usuario que tiene 1.000.000 mensajes en el foro suele ralentizar cualquier función hacia abajo.
¿Sería entonces otra tabla para los pases que podría ser incremental o simplemente un campo de 'progreso' en la tabla anterior badges_user?
Gracias por leer y por favor, se centran en la escalabilidad del sistema deseado (al igual que miles de usuarios y de 20 a 40 tarjetas de proximidad).
EDITAR: para solucionar un poco de confusión que tenía asignado_ como fecha/hora, los criterios para otorgar la insignia estarían mejor ubicados dentro de las consultas/funciones preparadas para cada insignia, ¿no es así? (Mejor flexibilidad)
se comprueban más que otros, así algunas insignias más populares? – bluedaniel
¿Podría aclarar la necesidad de "asignado (bool)"? ¿No es algo redundante ya que no tendrías un mapeo en el primer caso a menos que se te haya asignado el distintivo? ¿Y por qué importaría la cantidad de publicaciones en el foro? – Fredrik
mi primer error! Supongamos que está asignando insignias dependiendo de la cantidad de publicaciones realizadas, es decir, premiando publicaciones altas con buenas insignias -> incentivo para que los usuarios interactúen – bluedaniel