2013-05-10 3 views
0

Je suis au courant de ce post, mais je pense que ma question est légèrement différente et moins complexe.Comment structurer une base de données d'évaluations?

MySQL rating database structure

Si j'ai cinquante articles différents et je veux faire une base de données de notation de ces éléments est-il simplement une question d'avoir une colonne id et une colonne de score?

Ainsi, chaque fois qu'une nouvelle notation est entrée, l'identifiant de l'article et le classement créent une nouvelle ligne dans la base de données.

Ensuite, quand je veux interroger les résultats pour un article individuel, je demande simplement "WHERE id =xyz " et puis moyenne les évaluations ou faire ce que je dois faire avec l'article. Au fil du temps, je me retrouverais avec une énorme base de données d'ID et de notes. Je suppose que cela semble un peu bâclé, mais donner à chaque article et colonne individuelle, etc., est évidemment énorme.

Ou, y a-t-il une meilleure approche qui me manque ou d'autres choses que je ne considère pas?

Répondre

1

Vous souhaiterez peut-être une colonne rater afin que la même personne ne puisse pas soumettre plusieurs évaluations. Si vous n'utilisez pas les connexions, vous pouvez utiliser une chaîne aléatoire enregistrée dans un cookie. Quand quelqu'un essaie de soumettre une note, vous vérifiez le cookie. Si le cookie existe, vous remplacez l'ancienne notation ou vous refusez la réévaluation, mais vous souhaitez la gérer. S'il n'existe pas, vous générez la chaîne aléatoire et l'enregistrez dans le cookie.

Si vous n'avez pas besoin de suivre chaque évaluation individuelle, vous pouvez tout faire avec seulement deux colonnes dans un tableau par article. Les colonnes seraient avg_rating et num_ratings. Lorsqu'une nouvelle évaluation est soumise, vous pouvez mettre à jour l'estimation d'avergage avec la formule suivante:

UPDATE item_table 
SET avg_rating = @new_rating/(num_ratings+1) + avg_rating*(num_ratings/(num_ratings+1)), 
    num_ratings = num_ratings + 1 
WHERE item_id = @item 
+0

Très gentil merci. Et si je décide de filtrer les évaluateurs, quelle est votre méthode préférée? $ _SERVER ['REMOTE_ADDR'] ou quelque chose de similaire? L'ID de session semble pouvoir être contrecarré. – absentx

+0

Pour éviter les contrecoups, vous devez demander une connexion, mais empêcher le même utilisateur de créer plusieurs comptes serait difficile. L'ID de session est inutile car les sessions ne durent que quelques minutes. Sans connexion, vous pouvez utiliser des cookies, mais ils peuvent effacer les cookies. – Barmar

+0

un login serait trop pour ce système malheureusement ... nous voulons que l'utilisateur puisse évaluer avec une extrême facilité. Je pense qu'un cookie irait bien et même si le mieux que je pouvais faire était de le limiter à une évaluation par session de navigation qui serait plus que bien pour ce système. – absentx

Questions connexes