Как избежать сложных соединений в звездообразной схеме?

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


person Itay Moav -Malimovka    schedule 29.06.2010    source источник


Ответы (4)


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

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

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

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

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

person Cade Roux    schedule 02.07.2010

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

Если бы вы разместили модель (схему), было бы проще прокомментировать/помочь.

person Damir Sudarevic    schedule 30.06.2010
comment
У меня нет проблем с одношаговым соединением с измерением. Но предположим, что это измерение содержит дополнительные внешние ключи, что означает, что мне нужно дополнительно соединить таблицу измерений с некоторой таблицей поиска или даже с несколькими таблицами. - person Itay Moav -Malimovka; 30.06.2010
comment
Звучит как дизайн снежинки. В этом нет ничего плохого, при условии, что у дизайнера DW была веская причина для снежинки. - person Damir Sudarevic; 30.06.2010

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

Также помните, что, хотя вы получаете снижение накладных расходов на соединение, есть некоторые недостатки:

  • Потеря гибкости, которая может помешать развитию по мере расширения склада
  • Полное сканирование таблицы занимает больше времени (в традиционных СУБД на основе строк, таких как SQL Server).
  • Потребление места на диске

Вам придется рассматривать каждый случай отдельно.

Возможно, стоит также рассмотреть возможность создания материализованного представления, если такая возможность предоставляется вашей СУБД.

person shmichael    schedule 06.07.2010

Обычно у нас есть схема «снежинка» в качестве физического дизайна DWH, но мы добавляем слой представления отчетов, который сглаживает схему «снежинка» в схему «звезда».

Таким образом, ваш OLAP-куб становится намного проще и легче в управлении.

person Marcus D    schedule 03.06.2011