Складской дизайн базы данных: таблицы фактов и таблицы измерений

Я создаю хранилище данных бедного человека с помощью RDBMS. Я определил ключевые 'атрибуты', которые будут зарегистрированы как:

  • (истинный/ложный) пол
  • демографическая классификация (A, B, C и т.д.)
  • место рождения
  • дата рождения
  • вес (зарегистрированный ежедневно): факт, который зарегистрирован

Мои требования состоят в том, чтобы смочь выполнить запросы 'OLAP', которые позволяют мне:

  • 'часть и игра в кости'
  • 'разверните/вниз' данные и
  • обычно, смогите просмотреть данные с разных точек зрения

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

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

'Естественный' (или очевидный) размеры:

  • Размер даты
  • Географическое положение

Которые имеют иерархические атрибуты. Однако я борюсь с тем, как смоделировать следующие поля:

  • (истинный/ложный) пол
  • демографическая классификация (A, B, C и т.д.)

Причина я борюсь с этими полями, состоит в том что:

  1. У них нет очевидных иерархических атрибутов, которые помогут агрегированию (AFAIA) - которые предлагают, чтобы они были в таблице фактов
  2. Они главным образом статичны или очень редко изменяются - который предлагает, чтобы они были в таблице измерений.

Возможно, эвристика, которую я использую выше, слишком сыра?

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

Я хотел бы агрегировать и проанализировать данные сексуальной и демографической классификацией - например, ответить на вопросы как:

  • Как штекерные и розеточные веса выдерживают сравнение через различные демографические классификации?
  • Который демографическая классификация (штекер И розетка), покажите большую часть увеличения веса эта четверть.

и т.д.

Может любой разъясняться, является ли сексуальная и демографическая классификация частью таблицы фактов, или являются ли они (как я подозреваю), таблицы измерений.?

Также принятие они - таблицы измерений, кто-то мог уточнить структуры таблиц (т.е. поля)?

'Очевидная' схема:

CREATE TABLE sex_type (is_male int);
CREATE TABLE demographic_category (id int, name varchar(4));

может не быть корректный.

11
задан APC 29 May 2010 в 13:23
поделиться

4 ответа

Не понимаю, почему вы считаете, что использование СУБД - плохое решение, но надеюсь, что это может помочь.

weight_model_01.png

Таблицы dimGeography и dimDemographic являются так называемыми мини-измерениями; они позволяют выполнять срезы на основе демографических и географических данных без необходимости присоединяться к dimUser, а также фиксировать текущие демографические и географические данные пользователя на момент измерения.

И, кстати, в мире DW, подробный - Gender = 'female', AgeGroup = '30-35 ', EducationLevel =' University 'и т. Д.

9
ответ дан 3 December 2019 в 07:37
поделиться

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

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

Ключевым дизайнерским решением в вашем случае, вероятно, является анализ данных, связанных с возрастом, если исследование продолжается. Поскольку возраст людей меняется со временем, в какой-то момент они перейдут в другую возрастную группу. В зависимости от того, зафиксированы ли группы в начале исследования или нет, это может определить, как вы хотите агрегировать.Я не обязательно говорю, что у вас должно быть групповое измерение, и вы должны достичь возраста через него, но вам может потребоваться определить правильный возраст / демографический аспект во время ETL. Но это зависит от конечного использования (или совместимость с двумя ролями измерения, связанными из таблицы фактов - исходная демография, которая никогда не меняется, и текущая демография, которая будет меняться со временем).

То же самое можно сказать и о географии. Хотя вы, очевидно, можете отслеживать географию человека, анализируя текущие географические изменения с течением времени, суть размерного DW состоит в том, чтобы все соответствующие измерения были напрямую связаны с фактом (то, что вы обычно можете получить в нормализованной модели через сеть Модель Entity-Relationship - они заблокированы во время ETL). Эта избыточность ускоряет анализ размерной модели в традиционных СУБД.

Обратите внимание, что многое из этого не применяется в массивно-параллельных DW, таких как Teradata, которые плохо работают со звездообразными схемами - им нравятся все данные, нормализованные и связанные с одним и тем же первичным индексом, потому что они являются первичным индексом для распределения. данные по блокам обработки.

3
ответ дан 3 December 2019 в 07:37
поделиться

Поиск по звездной схеме - это SQL-эквивалент точек пересечения диаграмм Венна. Как ясно видно из ваших примеров запросов, SEX_TYPE и DEMOGRAPHIC_CATEGORY - это наборы, по которым вы хотите искать, и, следовательно, они должны быть размерными.

Что касается структур таблиц, я думаю, что ваш дизайн для SEX_TYPE ошибочен. Для начала, проще и интуитивно понятнее разрабатывать запросы на основе

where sex_type.name = 'FEMALE'

чем

where sex_type.is_male = 1

Кроме того, в реальном мире пол не является булевой величиной. Большинство приложений должны также собирать UNKNOWN и TRANSGENDER, и это, конечно, верно для приложений для здоровья/медицины, что вы, похоже, и делаете. Кроме того, это позволит избежать неприятных споров в офисе, если у вас есть коллеги-женщины.

Редактировать

"Я думаю о том, как справиться с случаями новых типов_пола и демографических категорий, которых еще нет в в базе данных"

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

3
ответ дан 3 December 2019 в 07:37
поделиться

Какой OLAP / инструмент уровня представления вы собираетесь использовать? Они часто имеют собственные функции для поддержки построения кубов, иерархий, агрегаций и т.д.

Нормальная форма обычно является наиболее надежной основой для гибкого и эффективного Хранилища данных, хотя Марты иногда денормализуются для поддержки определенного набора требований к отчетности. В отсутствие какой-либо другой информации я предлагаю вам стремиться к тому, чтобы ваша база данных находилась, по крайней мере, в нормальной форме Бойса-Кодда / 5-й нормальной форме.

1
ответ дан 3 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: