Лучший способ реализовать репутацию в стиле Stackoverflow - PullRequest
9 голосов
/ 20 июля 2010

Я внедряю систему репутации, похожую на Stackoverflow, на своем сайте с описанием рэп-текстов, Rap Genius :

  • Хорошее объяснение: + 10
  • Плохое объяснение: -1
  • У песни больше всего объяснений: + 30

У меня вопрос, как это реализовать. В частности, я пытаюсь решить, должен ли я создать таблицу reputation_events, чтобы помочь в пересчете репутации, или я должен просто пересчитать с нуля всякий раз, когда мне нужно.

Таблица reputation_events будет иметь столбцы для:

  • имя (например, "good_explanation", "bad_explanation")
  • awarded_to_id
  • awarded_by_id
  • awarded_at

Всякий раз, когда что-то влияет на репутацию, я вставляю соответствующую строку в reputation_events. Это позволяет легко пересчитать репутацию и создать понятную для человека последовательность событий, которая произвела репутацию данного человека.

С другой стороны, любое данное действие может повлиять на репутацию нескольких пользователей. Например, предположим, что пользователь A обгоняет пользователя B по заданной песне; Исходя из цели «Иметь наибольшее количество объяснений в песне», я должен был бы не забыть удалить оригинальное событие «has_the_most_explanations» Б (или, возможно, я бы добавил новое событие для Б?)

Ответы [ 2 ]

5 голосов
/ 20 июля 2010

В общем, я никогда не хотел, чтобы данные существовали более чем в одном месте.Похоже, ваша таблица reputation_events будет содержать данные, которые можно рассчитать на основе других данных.Если это так, я бы пересчитал с нуля, если только влияние на производительность не станет реальной проблемой.

Когда вы рассчитали сохраненные данные, у вас есть вероятность, что они могут не соответствовать корректно базовым данным - в основномиспорченное состояние.Зачем даже делать это возможным, если вы можете избежать этого?

1 голос
/ 20 июля 2010

Я бы сделал список событий репутации с целью пересчета и возможности отследить, почему общее значение повторения такое, какое оно есть.

Но почему есть столбец «имя», а не простозначение с положительным или отрицательным int?

Эта таблица станет огромной, убедитесь, что вы кешируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...