1

J'ai deux groupes d'entités. Restaurants et utilisateurs. Les restaurants peuvent être classés (1-5) par les utilisateurs. Et notation de chaque utilisateur devrait être récupérable.Évaluation de la structure de la base de données système

Resturant (id, nom, ....., total_number_of_votes, total_voting_points) utilisateur (id, nom ......)

Note (id, restaurant_id, user_id, RATING_VALUE)

Ai-je besoin de stocker la valeur moyenne pour qu'elle ne soit pas calculée à chaque fois? quelle table est le meilleur endroit pour stocker avg_rating, total_no_of_votes, total_voting_points?

Répondre

2

Eh bien, si vous stockez la valeur moyenne quelque part; il ne sera précis que la dernière fois que vous l'aurez calculé. (c'est-à-dire que vous avez 5 avis, puis stocker les moyennes quelque part.Vous obtenez 5 nouvelles nouvelles critiques, puis votre moyenne enregistrée est incorrecte). Mon opinion est que ce type de logique est parfaitement adapté à un niveau intermédiaire. Le calcul d'une moyenne ne devrait pas exiger beaucoup de ressources et ne devrait pas avoir d'impact sur les performances.

Si vous voulez vraiment le stocker dans la base de données; Je les stockerais probablement dans leur propre table, et mettrais à jour ces valeurs via des déclencheurs. Cependant, cela pourrait être encore plus gourmand en ressources que de le calculer au niveau intermédiaire.

0

Certaines bases de données, par exemple PostGreSQL, vous permettent de stocker un tableau dans le cadre d'une ligne. par exemple.

create table restaurants (
    ..., 
    ratings integer[], 
    ... 
); 

Ainsi, vous pourriez, par exemple, conserver les 5 dernières notes dans la même rangée que le restaurant. Lorsque vous obtenez une nouvelle note, mélangez les anciennes notes restantes et ajoutez la nouvelle note à la fin, puis calculez la moyenne.

Questions connexes