Как сохранить обратную связь, как звезды или голоса пользователей с эффективностью? - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю систему, аналогичную системе звездных рейтингов нашего Play Store, в которой продукт или организация получают оценки и отзывы от нескольких пользователей, и для каждого объекта отображается средний рейтинг.

Но проблемаявляется ли мне хранить рейтинги в базе данных каждой организации со списком пользователей, которые ее оценили, и присвоенными оценками, но пользователю будет сложно проверить, какие организации он оценил, так как нам нужно проверить каждую организацию насуществование пользователя,

Или, если я сохраню каждую сущность с рейтингом в пользовательской базе данных, но это усложнит рендеринг сущности

Итак, существует ли простой и эффективный способ, которым это можно сделать

Или эффективно хранит одни и те же данные в обеих базах данных, также я нашел один пример этой системы в stackoverflow, когда хранимые вверх и вниз голоса по вопросу и дают +5 за голосование вверх, а - за голосование вниззапрашивающему пользователю, что означает, что ему определенно нужно хранить каждую базу данных голосов «за» и «против», но когдаПользователь открывает вопрос, он может увидеть свой голос, поэтому он сохраняется в базе данных пользователя

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Самый простой способ добиться этого - создать обзорную таблицу, в которой хранятся пользователь и продукт.поэтому ваша база данных должна выглядеть следующим образом.

product
--id
--name
--price

user
--id
-- Имя
- Имя

Отзыв
--id
--userId
--productId
--vote

, тогда, еслиВы хотите получить все отзывы о товаре от пользователя, а затем просто запросить таблицу отзывов.надеюсь, что это решит вашу проблему?

0 голосов
/ 07 февраля 2019

Я бы действительно сохранил хотя бы «сырую» версию, поэтому у меня есть большая таблица, в которой хранятся productid / entityid, идентификатор пользователя и рейтинг.Вы можете запросить из этой таблицы напрямую, чтобы получить любой желаемый результат.Исходя из этого, вы также можете рассчитывать (или пересчитывать) прогнозы, если хотите, так что лучше хранить это как источник правды.

Вы можете начать с простого агрегированного запроса, еслипоскольку это достаточно быстро, но для его оптимизации вы можете составлять прогнозы для данных в другом формате, например, по среднему количеству отзывов для каждого продукта.Это может быть достигнуто с помощью (материализованных) представлений, или вы можете просто хранить агрегированный рейтинг отдельно при каждом голосовании.

Обновление этого прогнозируемого агрегата также может быть очень легким, поскольку вы можете сохранить средний рейтинг объекта вместе с количеством голосов.Поэтому, когда вы обновляете рейтинг, вы можете делать:

NewAverage = (AverageRating * NumberOfRatings + NewRating) / (NumberOfRatings + 1)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...