Если я разрешаю пользователям голосовать, только если они являются зарегистрированными пользователями ... какие еще проблемы могут возникнуть? - PullRequest
0 голосов
/ 13 февраля 2010

Предположим, я разрешаю пользователям голосовать, только если они являются зарегистрированными пользователями. Я должен ограничить каждого пользователя голосовать только один раз за статью?
Я должен поддерживать таблицу с 4 столбцами - articleid, userid, bit (для обозначения положительного / отрицательного) и столбец datetime.

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 февраля 2010

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

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

SELECT Vote, COUNT(Vote)
FROM tVotes
GROUP BY Vote, ArticleID
HAVING ArticleID = 1
0 голосов
/ 13 февраля 2010

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

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

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

...