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