2010-09-13 3 views
0

Лучше ли вести Дни месяца, месяца, года, дня недели и недели года в виде отдельных справочных таблиц или в общей таблице ответов? Цель - разрешить фильтрацию пользовательского контента и аналитику действий всеми различными значениями даты и времени (для пользователей на основе их общего контента будет создана пользовательская отчетность). Я пытаюсь обеспечить точность данных с помощью идентификаторов, а также сообщать о количестве акций и т. Д. По времени и дате для системной отчетности, сравнивая различные группы пользователей. Если мы будем держать в отдельных таблицах, то как насчет времени? Нужна таблица с каждым часом, минутой и секундой?Справочная таблица даты/времени, необходимая для анализа?

ответ

0

Большинство баз данных поддерживают некоторый тип данных TIMESTAMP, а также функции DAY(), MONTH(), DAYOFWEEK().

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

Даже тогда его стоит того, если вы ожидаете много фильтрации на основе этих значений, так как стоимость построения этих таблиц высока, и для большинства запросов стандартный SQL «GROUP BY ... HAVING ..» будет работать достаточно хорошо.

Похоже, что вас может заинтересовать «STAR SCHEMA» wikipedia - общий метод хранения данных для ускорения запросов - но будьте осторожны, проектирование и построение схемы звезд - это не тривиальное упражнение.

+0

Мое единственное беспокойство заключается в следующем: я показываю графики пользователей, например, количество настенных столбов в июне, далее фильтр по количеству сообщений в выходные дни (которые они будут вводить в зависимости от того, какой уик-энд по-разному меняется по всему миру). Затем пользователи могут сравнить выходные дни в выходные и прошлые выходные. Это только пример. С таким бизнес-требованием, что было бы лучшим подходом к хранению дня. Даже время будет фильтруемым, но для использования в системе, чтобы мы могли отслеживать, какое время дня люди говорят, что Великобритания активна, мот с делением статуса и обмена фотографиями и т. Д. ... – kino

+0

Мое понимание тогда я буду требовать создания таблицы фактов вокруг User Activities, то я могу добавлять к нему различные размеры, такие как Time, Location (у которого снова есть фильтры глубины, такие как состояние страны континента, город, окрестности .. люди, которые просматривают обновления и т. Д.), Затем Identity (Age, nationality , секс, ...). – kino

+0

Вы все еще можете сделать все это с помощью «обычных» запросов sql в поле Timestamp/date time. Но в вашем случае я думаю, что вам будет оправданно хранить как минимум год и месяц как единый купон YYMM, день недели и час в отдельных столбцах, которые можно индексировать, чтобы ускорить ваши запросы. Намек на большинстве БД, было бы неплохо иметь индекс «месяц, день, час», индекс «день, месяц, час», а другой - «час, день, месяц». –

Смежные вопросы