2010-07-20 7 views
9

estoy poniendo en práctica un sistema de reputación Stackoverflow-como en mi sitio de letras de rap explicación, Rap Genius:mejor manera de implementar la reputación de estilo Stackoverflow

  • Buena explicación: 10
  • Mala explicación: -1
  • tener la mayoría de las explicaciones en una canción: +30

Mi pregunta es cómo implementar esto. Específicamente, estoy tratando de decidir si debo crear una tabla de reputation_events para ayudar en el recálculo de la reputación, o si debería volver a calcular desde cero siempre que lo necesite.

La tabla de reputation_events tendría columnas para:

  • nombre (por ejemplo, "good_explanation", "bad_explanation")
  • awarded_to_id
  • awarded_by_id
  • awarded_at

Siempre sucede algo que afecta la reputación, inserto una fila correspondiente en reputation_events. Esto hace que sea fácil recalcular la reputación y generar una secuencia de eventos legible por el ser humano que generó la reputación de una persona determinada.

Por otro lado, cualquier acción dada podría afectar la reputación de múltiples usuarios. Por ejemplo, supongamos que el usuario A supera al usuario B en una canción determinada; basado en el objetivo de "Tener la mayor cantidad de explicaciones sobre una canción", tendría que recordar eliminar el evento original de "has_the_most_explanations" de B (o quizás agregaría un nuevo evento para B?)

+1

Encontré este video genial: http://www.youtube.com/watch?v=Yn7e0J9m6rE –

+0

posible duplicado de [¿Cómo puedo crear un sistema de "reputación" similar a StackOverflow usando Rails?] (Http: // stackoverflow.com/questions/5719050/how-can-i-create-a-reputation-system-similar-to-stackoverflow-using-rails) – Hauleth

Respuesta

5

En general, nunca me gusta que los datos existan en más de un lugar. Parece que su tabla "reputation_events" contendría datos que se pueden calcular a partir de otros datos. Si es así, volvería a calcular desde cero, a menos que el impacto en el rendimiento se convierta en un problema real.

Cuando ha calculado los datos almacenados, tiene la posibilidad de que no se correspondan correctamente con los datos base, básicamente, un estado dañado. ¿Por qué incluso hacerlo posible si puedes evitarlo?

1

Haría un evento de reputación enumere con el propósito de volver a calcular y poder rastrear por qué el valor total de la repetición es lo que es.

Pero, ¿por qué tener una columna de "nombre"? ¿Por qué no simplemente tener un valor con un valor positivo o negativo?

Esta tabla será enorme, asegúrese de que caché.

Cuestiones relacionadas