2009-09-14 5 views
1

Essayer de mettre en œuvre un système de notation des utilisateurs et des messages.gérer plusieurs réputation dans la base de données et le code

Quel est le meilleur schéma pour gérer les réputations multiples.

Un utilisateur a une réputation dérivée d'écritures et de commentaires (similaire à SO).

Les publications ont également une réputation (similaire à SO).

Mon idée initiale d'avoir une table de réputation. Les lignes correspondraient à l'identifiant de l'utilisateur/affichage et à la valeur du vote.

Deux questions:

  • Est-ce la meilleure façon de gérer cela?

  • Les ID uniques de l'utilisateur et les enregistrements d'enregistrement sont incrémentés automatiquement, la valeur par défaut que rake créerait. On dirait qu'il y a une possibilité que les uniques_ids puissent entrer en collision. Est-ce une préoccupation valable? Comment pourrais-je atténuer cela?

Merci

Répondre

4

Je mettrais des tables séparées pour la réputation de poste et la réputation de l'utilisateur. Ce sont des choses sémantiquement différentes et doivent être séparées en tant que telles. De cette façon, vous pouvez avoir une table qui a une clé étrangère à la poste, et l'autre avec une clé étrangère à l'utilisateur pour laquelle la réputation est applicable.

+0

semble qu'il y ait beaucoup de code dupliqué. Suggestions à ce sujet? – cbrulak

+0

si les deux tables ont la même 'forme' votre code de traitement de réputation ne s'en souciera-t-il pas? Dans .Net, vous devrez écrire certaines interfaces, mais cela fonctionnerait toujours. Je ne sais pas comment faire cela dans ruby ​​mais je pense que c'est possible – Joshua

+1

Peut-être que l'héritage est l'endroit où vous devriez regarder. Voir http://api.rubyonrails.org/classes/ActiveRecord/Base.html et la section sur 'Single Table Inheritance' Vous pouvez avoir un peu de code supplémentaire, mais vous ne devriez pas avoir à dupliquer le code, et à partir d'une base de données point de vue, il sera plus normalisé. –