|
|
|
| У меня есть таблица в которой хранятся сообщения и у неё есть поля `plus`, `minus`, `ratting` и `ratID`.
Если пользователь ставит плюс, то увеличивается параметр `plus` и `ratting`, а в поле `ratID` (тип TEXT) прибавляется что-то вроде ",ID-пользователя," (то есть ID пользователя будет между запятыми).
С одной стороны у нас только одна таблица и воторой мы смотрим параметры и если пользователь голосует - проверяем, есть ли его ID в поле `ratID`, если есть - голос не проходит, нет - проходит.
Правильно ли это? Или лучше сделать еще одну таблицу в которой будет просто ID-статьи и ID-пользователя, который проголосовал (для каждого голоса своя запись).
Как лучше?
PS. я слышал про то, что таблицы должна быть атомарными и прочее-прочее, вот поэтому, в принципе, и спрашиваю :) Но с другой стороны во втором варианте в таблице с голосами может оказаться очень много записей... | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 09:19)
| | лучше второй вариант, значения в поле через запятую это плохо
методика головсований | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 09:19)
| | Второй хорош, если вам нужно отслеживать активность конкретного пользователя и групп пользователей (например, по времени и периодам). Если такие статистические подробности не нужны, лучше ограничиться первым, интегральным вариантом. Иначе объемы могут быть действительно впечатляющими и их придется сворачивать и архивировать по периодам или удалять старые голосования - в общем целая история. | |
|
|
|
|
|
|
|
для: cheops
(07.08.2011 в 09:53)
| | Если такие статистические подробности не нужны
нужно отслеживать только один голос от юзера и не давать ему проголосовать дважды за одно и тоже | |
|
|
|
|
|
|
|
для: Valick
(07.08.2011 в 10:03)
| | Хм... да, что-то я отвлекся, тогда второй вариант наверное будет лучшим решением, это разделяет задачи учета голоса и контроля от повтороного голосования. Т.е. таблицы с голосами остаются компактными (ну или по крайней мере меньше), а это важно, так как результаты голосования показываются чаще, чем происходит сам процесс голосования. Чем меньше объем таблицы - тем быстрее происходит обработка запроса.
DEM, а каждое сообщение - это и есть голос? Т.е. оставляя сообщение пользователь голосует в обязательном порядке? | |
|
|
|
|
|
|
|
для: cheops
(07.08.2011 в 10:17)
| | Нет,
У анс есть таблица, к примеру comments в которой хранится ID пользователя, текст комментария, к какой статье относится, ну и тому подобные данные и плюс ко всему поля `plus`, `minus`, `ratting` и `ratID` (по последнему как раз вопрос). И когда любой авторизированный пользователь голосует ЗА или ПРОТИВ у нас меняются plus, minus и ratting, а в поле ratID добавляется еще один ID (проголосовавшего)
Мне просто надо проверить, голосовал пользователь или нет и всё. А количество голосов ЗА, ПРОТИВ и ОБЩИЙ РЕЙТИНГ отображаются вместе с самим комментомю, поэтому поля plus, minus и ratting я думаю лучше оставить в таблице comments | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 12:53)
| | т.е. у вас после того как пользователь проголосовал, невозможно установить "за" он или "против"
мягко говоря ай-ай-ай
я бы вообще оставил только поле ratting
а в доп таблице
id_com | id_user | ocenka
и первичный ключь на оба поля id_com | id_user | |
|
|
|
|
|
|
|
для: Valick
(07.08.2011 в 15:24)
| | Ну мне как бы и не интересно как проголосовал пользователь)))
Значит переделаю немного :) | |
|
|
|
|
|
|
|
для: DEM
(07.08.2011 в 15:32)
| | Ну мне как бы и не интересно как проголосовал пользователь)))
1) это не повод чтобы усложнять себе жизнь, пусть даже не осознавая того
2) сегодня не интересно, а завтра - неизвестно...
3) вообще-то правилом хорошего тона было бы дать возможность пользователю передумать и проголосовать иначе, т.е. выставить другую оценку, это же все-таки не тест какой-нибудь, ваш вариант такого не может себе позволить.
4) в моем варианте можно выставлять любые оценки, а в вашем? ;) + ко всему рейтинг можно просчитать по любому алгоритму абсолютно не напрягаясь | |
|
|
|
|
|
|
|
для: Valick
(07.08.2011 в 17:02)
| | Больше всего зацепил второй пункт :)
Вы правы, сделал так :) | |
|
|
|