Нужна помощь в разработке простой системы голосования на php

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

У меня есть следующие ограничения, т. Пользователи могут голосовать за или против или отменить свой голос.

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


person Ali    schedule 26.03.2011    source источник
comment
Вы можете получить представление об этом руководстве, просто применив его к своему приложению 'ссылка   -  person Rho    schedule 26.03.2011
comment
@Raymond Ho: это хорошо. Сделайте ответ!   -  person Smandoli    schedule 26.03.2011


Ответы (2)


Думаю, я бы пошел с таблицей соединения между таблицами users и articles:

users_articles
  - article_id
  - user_id
  - score
  - date

Со следующими примечаниями:

  • article_id - внешний ключ к статье, за которую проголосовали "за" / "против".
  • user_id - внешний ключ для проголосовавшего пользователя
  • score +1 или -1 в зависимости от голоса
  • первичный ключ находится в двух article_id, user_id столбцах.
  • пользователь, голосующий за статью, означает вставку одной строки в эту таблицу; отмена голосования означает удаление этой строки (или установку 0 баллов, если вы хотите отслеживать факт голосования пользователя)


Это для голосований по статьям.
И я бы сделал еще одну users_comments таблицу для голосов по комментариям.

person Pascal MARTIN    schedule 26.03.2011
comment
Это здорово - я думал об использовании одной таблицы для обоих с дополнительным полем, указывающим тип элемента, то есть, если это статья или комментарий и другое поле для хранения идентификатора элемента, но как я могу получить с помощью SQL набор, скажем, заголовков статей по сравнению с количеством голосов за и против или накопленным баллом - person Ali; 26.03.2011

Вы можете извлечь этот ответ из моего вопроса. Посмотрите на версию 1.6 для окончательного ответа (опубликовано как обновление в вопросе). Он моделирует пользователей, комментарии и рейтинги, а также некоторые ограничения, которые вы ищете.

Если у вас есть какие-либо вопросы о модели, дайте мне знать, над ней было проделано много работы, которая не была опубликована на SO из-за объема проделанной работы.

Вы также можете посмотреть Доска объявлений - Оптимизация базы данных.

person swisscheese    schedule 27.03.2011