Хорошо. Потерпите меня, поскольку мне нужно предоставить много контекстных деталей, прежде чем я смогу запросить разумный ответ на свой вопрос.
У меня есть сайт, который позволяет вам делать ежедневный выбор акций. Это работает так: вам предлагается сделать выбор между компаниями, которые сегодня противостоят друг другу. Например, GE против IBM. Вы можете выбрать два типа выбора: производительность (какая акция будет работать лучше?) И общий объем (будут ли комбинированные акции торговаться с объемами выше или ниже X?). Вам дается 100 виртуальных долларов каждый день, чтобы делать выбор.
В конечном итоге, наша цель состоит в том, чтобы отследить, какой пользователь зарабатывает больше всего денег на выбор в различных категориях (поясняется ниже) в следующие периоды времени: 5 дней, 15 дней, 30 дней, 90 дней, 180 дней, 1 год, за все время. Подсчитать, сколько денег приносит каждый выбор, очень просто. Это общая сумма заработанных (или проигранных) денег / количества выбранных.
Теперь каждая компания, которую выбирает пользователь, попадает в иерархию категорий. Обычно иерархия категорий выглядит так:
Подразделение -> Основная группа -> Отраслевая группа -> Классификация -> Компания
Вот несколько примеров:
Для каждой категории есть модель (и соответствующая таблица, конечно) , и они связаны (подумайте, foreign_key) так же, как вы видите выше.
Существует модель Matchup, с каждой записью, представляющей, какие компании противостоят в течение дня. Каждая запись отслеживает начальную и конечную цены акций каждой компании, а также общий объем торгов.
Каждый Matchup имеет одну или несколько: pick_prices, которые могут меняться в течение дня. Обычно у каждого матча есть Цена выбора производительности и Цена выбора общего объема. Цена определяет, сколько вам будет стоить кирка и сколько вы заработаете за правильный выбор. (Теперь это всего лишь справочная информация. Вам не нужно беспокоиться об этих конкретных расчетах цен.)
В конце торгового дня выбор пользователя принимается. Выборки представлены в модели выбора со следующими атрибутами:
В настоящее время, когда каждый выбор разрешен, обновляется другая таблица с именем pick_records, которая имеет следующие атрибуты:
Как видите, это является полиморфной моделью. В таблице собрана статистика всех записей выбора.
Итак, вот проблема:
Учитывая существующий дизайн, что мне нужно сделать, чтобы я мог фиксировать записи выбора пользователя в следующие периоды времени: 5 дней, 15 дней, 30 дней, 90 дней, 180 дней, 1 год, за все время? Он должен быть простым, эффективным и быстрым!
В настоящее время я использую Rails 2.3.11 в базе данных MySQL.