2011-04-01 2 views
0

BuzzFeed vous permet de note quelque chose comme:système de vote inspiré BuzzFeed

* LOL 
* Win 
* OMG 
* WTF 
* Cute 
* Fail 
* Geeky 
* Trashy 
* Old 
* Ew 

Disons que vous avez une table appelée Post, et vous avez créé un tableau intitulé Post_Ratings (post_id, rate_id) et une table appelée Évaluation pour cette .

Quelle serait la meilleure façon d'implémenter cette table? Une énumération ou une colonne pour chaque évaluation?

Également pour enregistrer quel article un utilisateur a déjà voté sur une table appelée user_rating contenant user_id, post_id, non?

+0

Un sujet peut-il avoir plusieurs évaluations du même utilisateur? Ils ne semblent pas mutuellement exclusifs. Quelque chose pourrait être vieux et trash, ou vieux et geek. Ou geek et trash. OMG! –

+0

Je pense que vous ne pouvez l'évaluer que comme une chose. Je voudrais/je vais le garder simple. –

Répondre

0

Si vous aviez une table de classement, ce serait rating_id (int) et rating_text (string). Votre table Post_Ratings a besoin d'une autre colonne. Il y a au moins trois colonnes clés (sauf si vous utilisez une clé de substitution). Ceux-ci seraient post_id, rating_id, et quelque chose pour différencier plusieurs évaluations par différents utilisateurs. Si vous avez une table utilisateur, vous pouvez utiliser un user_id. Ainsi, si un utilisateur souhaite modifier son vote, il peut le faire, mais les utilisateurs ne votent pas plusieurs fois dans des catégories différentes. Dernier en victoires pour chaque utilisateur.

En outre, je ne voudrais pas utiliser une énumération ou des colonnes, les deux risquent de vous causer des problèmes à un moment donné. Le meilleur design est de faire en sorte qu'une voix prenne une ligne (avec les trois colonnes indiquées). De cette façon, vous pouvez facilement compter le nombre de votes pour chaque publication en utilisant chaque note et vous pouvez même facilement compter le nombre de publications avec chaque rating_id. Si vous ajoutez une quatrième colonne à Post_Rating pour contenir la date et l'heure auxquelles un vote a été capturé, cela vous donne encore plus de flexibilité pour la création de rapports et la mise en relation de données.