2010-07-20 10 views
9

sto implementando un sistema di reputazione StackOverflow-come sul mio testi rap sito spiegazione, Rap Genius:modo migliore per attuare in stile StackOverflow reputazione

  • buona spiegazione: +10
  • Bad spiegazione: -1
  • ha la più spiegazioni su una canzone: +30

la mia domanda è come implementare questa. Nello specifico, sto cercando di decidere se dovrei creare una tabella di reputation_events per aiutare nel ricalcolo della reputazione, o se dovrei ricalcolare da zero ogni volta che ne ho bisogno.

La tabella di reputation_events avrebbe colonne per:

  • nome (ad esempio, "good_explanation", "bad_explanation")
  • awarded_to_id
  • awarded_by_id
  • awarded_at

Ogni volta succede qualcosa che colpisce la reputazione, inserisco una riga corrispondente in reputation_events. Ciò facilita il ricalcolo della reputazione e la generazione di una sequenza di eventi leggibili da parte dell'utente che ha generato la reputazione di una determinata persona.

D'altra parte, una determinata azione potrebbe influire sulla reputazione di più utenti. Ad esempio, supponiamo che l'utente A sorpassi l'utente B su una determinata canzone; sulla base dell'obiettivo "Hai le maggiori spiegazioni su una canzone", dovrei ricordare di eliminare l'evento originale di "has_the_most_explanations" di B (o forse aggiungerei un nuovo evento per B?)

+1

Ho trovato questo video eccezionale: http://www.youtube.com/watch?v=Yn7e0J9m6rE –

+0

possibile duplicato di [Come posso creare un sistema di "reputazione" simile a StackOverflow utilizzando Rails?] (Http: // stackoverflow.com/questions/5719050/how-can-i-create-a-reputation-system-similar-to-stackoverflow-using-rails) – Hauleth

risposta

5

In generale, non ho mai come i dati di esistere in più di un luogo. Sembra che la tabella "reputation_events" conterrà dati che possono essere calcolati da altri dati. In tal caso, ricalcolerei da zero, a meno che l'impatto sulle prestazioni non diventi un problema reale.

Dopo aver calcolato i dati memorizzati, si ha la possibilità che potrebbe non corrispondere in modo corretto con i dati di base - in pratica uno stato danneggiato. Perché renderlo possibile anche se puoi evitarlo?

1

Farei un evento di reputazione elencare ai fini del ricalcolo ed essere in grado di rintracciare perché il valore di ripetizione totale è quello che è.

Ma perché avere una colonna "nome", perché non solo avere un valore con un int positivo o negativo?

Questa tabella diventerà enorme, assicurati di memorizzare nella cache.

Problemi correlati