Параметр "Снежинка"

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

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

Каков наилучший способ обработки дат в этом сценарии?


person Ravi    schedule 13.06.2016    source источник
comment
Есть ли шанс, что какие-либо другие таблицы фактов должны будут использовать эти даты? Я спрашиваю, как вы думаете, их следует сопоставить с другими фактами, или это скорее единичный случай?   -  person Mark P.    schedule 13.06.2016
comment
На данный момент только никакие другие факты не связаны с какими - либо датами . У нас есть только один проект_измерение с датами. поэтому целесообразно создать измерение даты и поместить все эти даты в таблицу фактов и ссылаться с помощью ключей даты? как я могу обрабатывать недоступные даты в этом случае (должен ли я создать недоступную дату 19000101? Каковы недостатки дат снежинки? Спасибо   -  person Ravi    schedule 13.06.2016


Ответы (1)


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

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

Для нулевых FK я бы по умолчанию использовал любую дату по умолчанию, которая есть в вашей системе, для нас наша неуказанная запись — 01.01.1901. Я бы не оставил их нулевыми, если только бизнес-пользователи не хотят видеть 1901, и даже в этом случае я, вероятно, обнулил бы их оператором case, но все равно оставил бы поле заполненным в таблице.

Вот хорошая статья, описывающая преимущества/недостатки каждого типа. Как я уже сказал, ни одно из них не является полностью правильным или неправильным.

http://www.dataonfocus.com/star-schema-and-snowflake-schema/

person Mark P.    schedule 13.06.2016
comment
Спасибо... Это помогает. - person Ravi; 13.06.2016