В хранилище данных я всегда предпочитаю общую звездообразную схему с минимальным количеством снежинок, хотя это, очевидно, немного личное предпочтение и может зависеть от того, какую среду вы используете. Для Oracle (среда, к которой я больше всего привык) он поддерживает снежинки физически, но наилучшая практика означает, что снежинки не делаются снежинками на уровне бизнес-модели (логическом).
Лично я бы настаивал на включении FK в факт по нескольким причинам. Один, который поддерживает звезду, которая обычно работает лучше, поскольку снежинки вводят больше соединений, а звезды быстрее обрабатывают агрегацию. Во-вторых, если у вас есть пользователи, объединяющие эти данные с данными из других фактов, наличие согласованного измерения даты просто имеет смысл, может повысить производительность запросов и является более надежным. Наконец, звезды, вероятно, наиболее распространены, поэтому в будущем будет проще привлечь других к работе в этой области/данные могут лучше работать с другими приложениями в будущем.
Для нулевых FK я бы по умолчанию использовал любую дату по умолчанию, которая есть в вашей системе, для нас наша неуказанная запись — 01.01.1901. Я бы не оставил их нулевыми, если только бизнес-пользователи не хотят видеть 1901, и даже в этом случае я, вероятно, обнулил бы их оператором case, но все равно оставил бы поле заполненным в таблице.
Вот хорошая статья, описывающая преимущества/недостатки каждого типа. Как я уже сказал, ни одно из них не является полностью правильным или неправильным.
http://www.dataonfocus.com/star-schema-and-snowflake-schema/
person
Mark P.
schedule
13.06.2016