Как разработать систему рейтинга, которая позволяет один голос на пользователя, учитывая производительность? - PullRequest
1 голос
/ 29 апреля 2011

Я использую Ruby on Rails \ MySQL, и я хотел бы внедрить систему рейтингов со следующими условиями \ возможностями с учетом большого количества пользователей и статей:

  • Каждая статья имеет 3 критерия рейтинга
  • Каждый критерий представляет собой двоичную функцию (примеры: хорошо \ плохо, +1 \ -1, ...)
  • Каждый пользователь может голосовать один раз за критериии по статье

Я хотел бы знать в этих условиях, каковы наилучшие подходы \ методы для проектирования \ анализа базы данных (например, в UML) для обеспечения оптимальной производительности(время ответа на запрос к базе данных, перегрузка процессора, ...).

PS: Я думаю, что система оценки работает на веб-сайте Stackoverflow.

1 Ответ

2 голосов
/ 29 апреля 2011

Создать таблицу для рейтингов:

CREATE TABLE vote
        (
        userId INT NOT NULL,
        articleId INT NOT NULL,
        criterion ENUM('language', 'usefulness', 'depth') NOT NULL, -- or whatever
        value BOOLEAN NOT NULL,
        PRIMARY KEY (userId, articleId, criterion)
        )

Это позволит каждому пользователю отдавать не более одного голоса за статью по критерию.

criterion имеет тип enum, который допускает только три различных критерия. Это ограничение относится к уровню метаданных: это означает, что если вы хотите добавить критерии, вам придется изменить определение таблицы, а не данные.

...