Итак, я думаю, что понял, что ставить в измерениях, что в таблице фактов и как этого добиться. Теперь у меня есть проблема, что у меня есть измерение "продукт" и измерение "productProperties". Мне пришлось разделить это, иначе мой естественный ключ в «продукте» больше не был бы уникальным. Я задал это в этом вопросе.
Итак, моя таблица размеров productProperties должна была выглядеть так: Color | Материал | Размер
1.) Чтобы добиться этого, мне пришлось создать всевозможные перестановки значений «цвет», «материал», «размер» и так далее, верно?
Это было бы намного больше 200 миллионов строк, поэтому я решил разделить это. Теперь у меня есть измерение «Цвет», которое на самом деле состоит из столбцов «цвет», «colorFront», «colorBack».
2.) Думаю, это нормально, но как насчет измерения «размер», которое состоит только из столбцов «surrogate_key» и «значение»?
Я читал о «вырожденных измерениях» (в рекомендации по чтению, приведенной в моем другом вопросе), что означает, что «измерения одного столбца» должны быть одним столбцом в таблице фактов. Мне это кажется немного непрактичным, поскольку в моей таблице фактов осталось бы около 5-6 дополнительных столбцов.
Что, если я должен это сделать?
3.) Являются ли эти вырожденные измерения частью первичного ключа в таблице фактов?
Самый важный вопрос: в моей таблице фактов будут записи продуктов, которые не соответствуют каждому столбцу в моих измерениях или не всем измерениям вообще. Это означает, что у меня может быть запись / продукт со свойством «цвет», но не «colorFront» или «colorBack». Поскольку я создал каждую перестановку 'color', 'colorFront' и 'colorBack', при попытке заполнить мою таблицу фактов я получу несколько суррогатных ключей, если продукт имеет только свойство 'color', что приводит к дублированию в моем таблица фактов, верно?
4.) Так должен ли я отфильтровывать эти дубликаты при запросе моей таблицы фактов? Или это вообще неправильно?
Конечно, я мог бы разделить «цвет» измерения на три измерения. Но тогда я получу записи со значениями NULL в некоторых столбцах. То же самое и с записями / товарами, которые вообще не используют какие-то размеры.
5.) Как обрабатывать эти значения NULL?
Заранее благодарю за любую помощь.