2010-07-20 16 views
9

mam wdrożenie Stackoverflow-podobnego systemu reputacji piosenki rap na moim miejscu wyjaśnienie Rap Genius:najlepszym sposobem wdrożenia Stackoverflow stylu reputacji

  • Dobre wyjaśnienie: +10
  • Bad wyjaśnienie: -1
  • mają najbardziej wyjaśnień w piosence: +30

Moje pytanie jest jak zaimplementować to. W szczególności staram się zdecydować, czy powinienem utworzyć tabelę o numerze reputation_events, aby pomóc w ponownym obliczaniu reputacji, czy też powinienem ją przeliczyć od nowa, ilekroć zajdzie taka potrzeba.

Tabela reputation_events musiałby kolumny:

  • nazwy (np "good_explanation", "bad_explanation")
  • awarded_to_id
  • awarded_by_id
  • awarded_at

Kiedykolwiek coś się dzieje, co wpływa na reputację, wstawiam odpowiedni wiersz do reputation_events. Dzięki temu łatwo jest ponownie obliczyć reputację i wygenerować czytelną dla człowieka sekwencję zdarzeń, które wygenerowały reputację danej osoby.

Z drugiej strony każda dana czynność może mieć wpływ na reputację wielu użytkowników. Np. Załóżmy, że użytkownik A wyprzedza użytkownika B w danej piosence; na podstawie celu "Mam najwięcej wyjaśnień na temat utworu", musiałbym pamiętać, aby usunąć oryginalne wydarzenie B "has_the_most_explanations" (a może dodaję nowe wydarzenie dla B?)

+1

Znalazłem to wideo świetnie: http://www.youtube.com/watch?v=Yn7e0J9m6rE –

+0

możliwy duplikat [Jak utworzyć system "reputacji" podobny do StackOverflow za pomocą Rails?] (Http: // stackoverflow.com/questions/5719050/how-can-i-create-a-reputation-system-similar-to-stackoverflow-using-rails) – Hauleth

Odpowiedz

5

Ogólnie rzecz biorąc, nie podoba mi się, że dane istnieją w więcej niż jednym miejscu. Wygląda na to, że tabela "reputation_events" zawiera dane, które można obliczyć na podstawie innych danych. Jeśli tak, to przeliczyłbym się od zera, chyba że wpływ na wydajność stanie się poważnym problemem.

Po obliczeniu zapisanych danych istnieje możliwość, że może nie odpowiadać poprawnie danym bazowym - w zasadzie stan uszkodzony. Po co to robić, jeśli możesz tego uniknąć?

1

Zrobiłbym wydarzenie związane z reputacją wykaz w celu ponownego obliczenia i jest w stanie ustalić, dlaczego całkowita wartość rep jest taka jaka jest.

Ale dlaczego kolumna "nazwa", dlaczego nie mają wartości z dodatnim lub ujemnym int?

Ten stół będzie ogromny, upewnij się, że buforujesz.

Powiązane problemy