2012-02-02 7 views
7

Actualmente estoy diseñando un sitio educativo.El mejor enfoque para diseñar el marco para el sistema de asignación de distintivos

Para esto tenemos que asignar algunas insignias al usuario en función de su actividad (como stackoverflow).

Estaba buscando un marco para esto. Alguien tiene alguna idea, ¿cómo se puede hacer esto? diseño de mesa, etc.

cuestiones que se me ocurría con esto son:

  1. Podemos tener gran cantidad de credenciales, por lo que en cada acción del usuario que no podemos comprobar todas las insignias y comprobar si ningún logro puede se le asignará
  2. Al agregar una nueva insignia y los criterios para esto, no quiero cambiar el código existente para manejar esto (¿podemos tener alguna solución genérica?)
  3. ¿Qué db debería elegir (digamos si mi marco en por ejemplo, plantea el evento cuando los criterios para una insignia satisfacen y estas reglas se crean en DB (como sql). O puedo ir para nosql db (como m ongodb como mi resto del proyecto se encuentra en mongodb)

Mi búsqueda inicial me dio siguientes cosas

  1. motor de reglas -> también se tarea muy tediosa Database Architecture for "Badge" System & Arbitrary Criteria (MySQL/PHP)
  2. Uno de los proyectos ->http://drupal.org/project/user_badges (no capaz de entenderlo correctamente)
  3. que dice la gente de su estructura de la tabla debe ser así y esto ..y todos .. Best way to store Badge criteria? Creating "Badges" for my site, best way to store user badges? Using PHP
+0

Anteriormente SO trabajo sobre el tema resumido en una respuesta a http://stackoverflow.com/questions/9835321/designing-a-pluggable-points-and-badges-system –

Respuesta

1

Definitivamente elegiría una base de datos relacional sobre una base de datos nosql para este enfoque.

Lo primero que necesita es la estructura subyacente de una insignia.

ID (int) 
Title (Varchar 255) 
Image (Varchar 255) - would hold location to image 
Points (int) 

Debería almacenar todas las identificaciones que un usuario haya obtenido. Así que en su sección de los usuarios:

Badges (Varchar) - holds a serialized array of badge IDs 
Badge_count (int) - So you can get the total without parsing through Badges. 
Point_count (int) 

Ahora dicen que no se puede consultar en contra de todas las insignias de cada uno realizado por acción, lo que también debe almacenar una entrada para cada acción. Así dice en su tabla de "mensajes", por ejemplo:

Possible_badges (Varchar 255) - serialized array of Badge ID's 

Luego, puede normalizar y dar solamente las insignias relacionadas con cualquier tarea específica de su motor de reglas.

Su mejor opción es simplemente comenzar a jugar con ellos, si no comprende lo que hay que comprometer e ir por la lógica básica, solo otorgue insignias para tareas que puedan medirse por las entradas de la base de datos (principalmente numéricas datos). O pasa más tiempo aprendiendo (y quitándose el pelo).

Cuestiones relacionadas