При создании системы социального голосования следует ли вам отслеживать отрицательные и отрицательные голоса отдельно в БД? - PullRequest
3 голосов
/ 09 апреля 2009

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

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

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

Ответы [ 10 ]

5 голосов
/ 09 апреля 2009

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

2 голосов
/ 09 апреля 2009

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

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

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

1 голос
/ 09 апреля 2009

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

1 голос
/ 09 апреля 2009

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

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

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

1 голос
/ 09 апреля 2009

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

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

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

0 голосов
/ 09 апреля 2009

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

0 голосов
/ 09 апреля 2009

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

0 голосов
/ 09 апреля 2009

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

0 голосов
/ 09 апреля 2009

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

0 голосов
/ 09 апреля 2009

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

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

...