Если я позволю пользователям голосовать только в том случае, если они являются зарегистрированными пользователями… какие еще проблемы могут возникнуть?

StackOverflow https://stackoverflow.com/questions/2256617

  •  20-09-2019
  •  | 
  •  

Вопрос

Предположим, я разрешаю пользователям голосовать только в том случае, если они являются зарегистрированными пользователями.Мне следует ограничить голосование каждого пользователя только один раз за статью?
Я должен поддерживать таблицу с четырьмя столбцами: идентификатор статьи, идентификатор пользователя, бит (для обозначения положительного/отрицательного значения) и столбец даты и времени.

Вы все еще видите, что этим злоупотребляют?

Чтобы получить чистый рейтинг, я бы дважды запросил таблицу: один раз для подсчета всех положительных голосов и один раз для подсчета всех отрицательных голосов.

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

Это было полезно?

Решение

Сохранение голосования зарегистрированным пользователям позволяет избежать злоупотреблений и повторного голосования через разные IP-адреса.

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

РЕДАКТИРОВАТЬ:Я должен настаивать на том, что запросы к нескольким таблицам — плохая практика, если вы можете предварительно их вычислить.Разрушение реляционных моделей — важная часть оптимизации базы данных.

Другие советы

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

Кстати, вам не нужно будет дважды запрашивать базу данных, поскольку вы можете получить два значения через группу по запросу, например:

SELECT Vote, COUNT(Vote)
FROM tVotes
GROUP BY Vote, ArticleID
HAVING ArticleID = 1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top