Голосовать за статью. Как спланировать базу

зверек

Новичок
Голосовать за статью. Как спланировать базу

Здравствуйте.

Стоит задача устроить голосования под каждой, вывешиваемой на сайт статьей. Ну знаете, на многих сайтах есть такое "проголосуйте за статью" и селект из 5 или 10 позиций.
Я думаю, как мне устроить под это дело базу. Как потом обрабатывать результаты? Сколько чел выбрало 1, сколько 2, сколько 5 и т.д.?
Ничего путного в голову не приходит, кроме как состряпать таблицу с графами:

id статьи| 1 |2 | 3 | 4| 5 |

Это если оценка по пятибальной шкале. И заносить данные от голосования в соответсвующие графы...Потом графики уже строить и пр...
Но мне кажется это какой-то тупой вариант.

Как вообще делают обычно?

Спасибо.
 
одна таблица для правил:
id статьи|диапазон оценок

отдельную таблицу для результатов:
id статьи|vote

если нужно, можно расширить (например для анализа от накрутчиков), добавить votedt, voteip

как реализуешь диапазон - твое дело, можешь например сделать строку типа "1,2,3,4,5", можешь сделать 5 записей в таблице для каждого ответа
 
зверек
Если это нужно только для рейтинга, можно просто хранить средний бал и кол-во проголосовавших.
 
HEm

очевидно, что никакие диапазоны или пять записей в твоем варианте не нужны. Просто

table articles
id | title | text | ...

table votes
article_id | user_uid | vote | timestamp

В таблице votes отражается тот факт, что юзер с уникальным номером user_uid поставил статье article_id оценку vote.

Составной уникальный ключ (article_id,user_uid) защищает от накруток.

Всю нужную статистику (группировки итп) можно извлечь из таблицы votes.
 
Резюме:
реализаций - туча, отталкиваться нужно от поставленных задач
 
угу. понятно. Спасибо!

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

Как обычно это делается?
 
1. добавь поле с ip-адресом голосующего и не давай ему больше голосов
как вариант - добавить поле datetime и не давать голосовать определенное время (скажем с одного ip не чаще чем раз в два часа)
 
Можно, например, пресекать повтороное голосование с одного и того-же IP в течении часа.
Можно добавлять в cookies запись - проголосовал и пресекать голосование в пределах одной сессии броузера.
Но тут дело такое, что кому очень будет надо - тот накрутит отключив cookies или голосуя с разных IP.
 
да никому оно не надо, не трать силы попусту, поставб отбой по ип и хватит вполне
 
Сверху