Я видел несколько вопросов о том, как обезопасить и предотвратить злоупотребление системами ранжирования (например, просмотр фильмов, продуктов и т. Д.), Но ничего о реальной реализации. Чтобы упростить этот вопрос, безопасность не беспокоит меня, все люди, получающие доступ к этой системе, пользуются доверием, а злоупотребление системой ранжирования, если это произойдет, тривиально и легче отменить, чем вызвать. В любом случае, мне любопытно, как хранить голоса.
Одна мысль состоит в том, чтобы иметь таблицу голосов, которая регистрирует каждый голос, а затем либо сразу, в запланированное время, либо при каждой загрузке продукта (это кажется неэффективным, но, возможно, нет), голоса подсчитываются и удваиваются между 0 и 5 обновляются в записи продукта в таблице продуктов.
В качестве альтернативы я сохраняю в таблице продуктов общий балл и количество голосов, и просто делю их, когда отображаю, и добавляю голос к общему количеству и увеличиваю число, когда кто-то голосует.
Или есть лучший способ сделать это, чего у меня нет? Я хотел бы просто иметь поле «рейтинг» в таблице продуктов, но не могу придумать, как обновить голоса без каких-либо дополнительных данных.
Опять же, целостность данных важна, но ни в коем случае не нужна, какие-либо мысли?