1

У меня есть две группы сущностей. Ресторанов и пользователей. Рестораны могут оцениваться пользователями (1-5). И рейтинг от каждого пользователя должен быть восстановлен.Структура базы данных системы рейтинга

Resturant (номер, имя, ....., total_number_of_votes, total_voting_points) пользователя (идентификатор, имя ......)

Рейтинг (ID, restaurant_id, user_id, rating_value)

Нужно ли хранить значение avg так, чтобы его не нужно было рассчитывать каждый раз? какая таблица - лучшее место для хранения avg_rating, total_no_of_votes, total_voting_points?

ответ

2

Ну, если вы где-то храните среднее значение; он будет только точным, как в последний раз, когда вы его рассчитали. (т. е. у вас есть 5 отзывов, а затем сохраните средние значения. Вы получаете еще 5 новых обзоров, а затем ваш сэкономленный средний показатель неверен).

Мое мнение таково, что такая логика идеально подходит для среднего уровня. Вычисление среднего значения не должно быть очень ресурсоемким и действительно не должно влиять на производительность.

Если вы действительно хотите сохранить его в базе данных; Я бы, вероятно, сохранил их в своей таблице и обновил эти значения через триггеры. Однако это может быть еще более ресурсоемким, чем вычисление его в среднем ярусе.

0

Некоторые базы данных, например PostGreSQL, позволяют хранить массив как часть строки. например

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

Таким образом, вы можете, например, сохранить последние 5 оценок в той же строке, что и в ресторане. Когда вы получите новый рейтинг, перетасуйте старые рейтинги слева и добавьте новый рейтинг в конце, а затем вычислите среднее значение.