Как структурировать данные для пользователей по дате в базе данных MySQL - PullRequest
1 голос
/ 08 марта 2012

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

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

С текущим сайтом на 1500 пользователей и несколькими пользователями, отправляющими каждый день ... я просто не знаю, как это происходит.

Любая помощь будет отличной.Спасибо

1 Ответ

0 голосов
/ 08 марта 2012

Один подход, основанный на том, что я думаю, что вы ищете:

Создайте таблицу User_Session, содержащую FK User_ID, Start_Time и End_Time. Запишите новую строку в эту таблицу каждый раз, когда пользователь начинает и заканчивает сеанс. Вы можете получить эти User_ID и Start_Time при входе в систему и захватить End_Time после завершения сеанса или выхода пользователя из системы.

Теперь у вас есть историческая таблица с [1500 пользователей] x [количество сеансов в день], которую я бы назвал большим, но невообразимо таким. (Особенно если посмотреть, как он правильно проиндексирован и т. Д.) Вы можете выполнять запросы к этой таблице, что-то вроде SELECT User_ID, SUM (End_Time - Start_Time), так сказать, для любых диапазонов дат, которые вам нужны.

Чтобы контролировать размер таблицы, вы могли бы в свою очередь сохранить эти агрегированные значения (User_ID, MMYY, Num_Minutes) и обрезать исходную таблицу по некоторому заданному расписанию. Сохранение вычисленных полей может быть не предпочтительнее, чем иметь под рукой нормализованные данные. Поэтому, возможно, не идите по этому пути, пока не определите, что размер исходной таблицы является большой проблемой.

Просто один из многих способов, упрощенный ради ясности.

...