При создании системы общественного голосования следует ли отдельно отслеживать в БД голоса против и за голоса?

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

Вопрос

С такими вещами, как SO, Digg, Reddit и т. д.

Следует ли отслеживать отрицательные голоса в базе данных независимо от голосов «за»?Или у них просто должно быть поле «голосов», которое уменьшается/увеличивается в зависимости от того, что делает пользователь, без сохранения этого значения?

Как следует обращаться с голосами?

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

Решение

В SO голоса «за» приносят +10, голоса «против» -2.Чтобы это работало, их нужно отслеживать отдельно.Вполне возможно, что спорный ответ приведет к появлению нескольких из них, и простое отображение совокупного числа не будет иметь большого значения.Поэтому я бы посоветовал держать их отдельно.

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

Я бы держал их отдельно.В некоторых вопросах много активности (вверх и вниз), и вам действительно нравится их идентифицировать.

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

Я также предполагаю, что SO сохраняет отдельные голоса за записи CW и не CW.Потому что, если позже вопрос изменится на CW, даже при пересчете, исходная полученная/потерянная репутация сохранится.

Зависит от того, что вы хотите делать со своими данными.

Если вы хотите отображать только голоса, я говорю, что вы используете только одно поле.Это как количество просмотров темы на форуме.Вы хотите видеть то, что получает больше всего кликов, а не то, сколько раз кто-то просматривал это.

Система голосования на SO немного сложнее.Поскольку они могут отменить все голоса конкретного пользователя, им необходимо отслеживать ВОЗ голосовал за/против что.Я думаю, это записано в другой таблице, но поскольку пересчитывать все голоса каждый раз, когда кто-то просматривает вопрос, дорого, они сохраняют рассчитанное значение в поле, меняя его всякий раз, когда кто-то голосует.

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

Но было бы также хорошо иметь своего рода заранее рассчитанное поле (назовем его кешем), которое обновляется всякий раз, когда отправляется голос «за» или «против».Затем страницы будут отображаться с использованием этого заранее рассчитанного поля.Это увеличит время отклика и уменьшит нагрузку на БД.

Если немедленный пересчет значений слишком затратен, вы можете рассмотреть возможность запуска некоторых задач планировщика (один раз в час?), которые будут обрабатывать актуальные голоса и пересчитывать кэшированные значения.

Учитывая объем данных, которые вы будете иметь в базе данных для веб-сайта социального голосования, дополнительное место для дополнительных int Столбец для хранения голосов против будет незначительным, так что вы были бы сумасшедшими, если бы не сделали этого.

Что ж, учитывая, что SO имеет +10 для положительного голоса и -2 для отрицательного, и время от времени происходит перерасчет, ему придется хранить их независимо.

В противном случае ответ с 10 голосами «за» и 5 «против», который изначально давал вам 90 баллов, будет пересчитан до 50, если бы они не сохранялись отдельно.

Я бы сохранил их отдельно, чтобы иметь возможность просматривать их отдельно.В социальном плане голосование «за» сильно отличается от голосования «против», и я бы хотел иметь возможность смотреть на них независимо, если бы это был я.

Обязательно отдельно по одной очень простой причине.Завтра вам захочется сделать что-то еще, для чего потребуется эта информация (например, какой-нибудь отчет или график).К тому же хранение их отдельно вам ничего не стоит.

поскольку люди обычно могут проголосовать один раз и (например, в SO) могут отменить свои голоса, вам необходимо знать, кто голосовал, в какое время, за какой голос и по какому вопросу.

Я уверен, что голоса «против» и «за» хранятся отдельно, хотя может быть и совокупное поле, в котором ведется подсчет.SO позволяет вам изменить голос позже (сделать голос против голоса плюс), и именно поэтому я считаю, что голоса также регистрируются для каждого пользователя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top