2012-02-02 15 views
7

Attualmente sto progettando un sito di formazione.Miglior approccio per la progettazione di strutture per il sistema di assegnazione badge

Per questo è necessario assegnare alcuni badge all'utente in base alla loro attività (come stackoverflow).

stavo cercando un quadro per questo. Qualcuno ha qualche idea, come si può fare? Table design ecc

questioni che mi veniva in mente con questo sono:

  1. Possiamo avere gran numero di badge, così su ogni azione di utente non siamo in grado di controllare tutti i badge e verificare se alcuna medaglia possibile essere assegnato
  2. Aggiungendo un nuovo badge e criteri per questo, non voglio cambiare il codice esistente per gestire questo (possiamo avere qualche soluzione generica?)
  3. Quale db dovrei scegliere (diciamo se il mio framework in come, solleva l'evento quando i criteri per un badge soddisfano e queste regole sono create in DB (come sql) oppure posso andare per nosql db (come m ongodb come il mio resto del progetto è in MongoDB)

La mia ricerca iniziale mi ha dato seguenti cose

  1. motore di regole -> comporterà compito molto noioso Database Architecture for "Badge" System & Arbitrary Criteria (MySQL/PHP)
  2. Un progetto ->http://drupal.org/project/user_badges (non è in grado di capirlo correttamente)
  3. le persone dicono che la struttura del tavolo dovrebbe essere così e questo .. e tutto .. Best way to store Badge criteria? Creating "Badges" for my site, best way to store user badges? Using PHP
+0

In precedenza SO lavoro sull'argomento riepilogato in una risposta a http://stackoverflow.com/questions/9835321/designing-a-pluggable-points-and-badges-system –

risposta

1

Definirei sicuramente un database relazionale su un database nosql per questo approccio.

La prima cosa di cui hai bisogno è la struttura sottostante di un badge.

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

Dovresti quindi memorizzare tutti i badge che un utente ha guadagnato. Quindi nel tuo sezione utenti:

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) 

Ora si dice che non è possibile interrogare contro tutti i badge per ogni azione effettuata, così si dovrebbe anche memorizzare una voce per ogni azione. Così dicono nella tabella "messaggi", per esempio:

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

È quindi possibile normalizzare e dare solo i cartellini relativi a qualsiasi compito specifico per il vostro motore di regole.

La tua migliore scommessa è solo iniziare a giocare con loro, se non capisci cosa c'è là fuori che devi scendere a compromessi e andare per la logica di base quindi premi distintivi solo per compiti che possono essere misurati dalle voci del database (principalmente numeri dati). Oppure dedica più tempo all'apprendimento (e tira fuori i capelli).

Problemi correlati