Схема звезды - размеры одного столбца - PullRequest
1 голос
/ 14 сентября 2010

Я новичок в хранилищах данных, но думаю, что на мой вопрос можно относительно легко ответить. Я построил звездообразную схему с таблицей измерений «продукт». Эта таблица имеет столбец «PropertyName» и столбец «PropertyValue». Таким образом, размер выглядит примерно так:

surrogate_key | natural_key (productID) | PropertyName | PropertyValue | ...
    1              5                          Size           20          ...
    2              5                          Color          red
    3              6                          Size           20
    4              6                          Material       wood

и т. Д.

В моей таблице фактов я всегда использую суррогатные ключи измерений. Из-за столбцов PropertyName и PropertyValue мой естественный ключ больше не является уникальным / идентифицирующим, поэтому в таблице фактов я получаю слишком много строк.

Теперь у меня вопрос: что мне делать со столбцами свойств? Будет ли лучше поместить каждое свойство в отдельные измерения, такие как размер измерения, цвет измерения и т. Д.? Я получил около 30 различных свойств. Или я должен создать столбцы для каждого свойства в таблице фактов? Или сделать одно измерение со всеми свойствами?

Заранее спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2010

Ваша таблица измерений 'product' должна выглядеть следующим образом:

surrogate_key | natural_key (productID) | Color | Material | Size | ...
    1              5                      red     wood       20     ...
    2              6                      red     ...         

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

Рекомендация по чтению: Инструментарий хранилища данных, Ральф Кимбалл

1 голос
/ 14 сентября 2010

Ваш дизайн называется EAV ( entity-attribute-value ) table.

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

Однако у него есть несколько недостатков.

  • Его нельзя индексировать (и, следовательно, эффективно искать) сразу по двум или более свойствам. Такой запрос: «получить все изделия из дерева, имеющие размер или 20» будет менее эффективным.

  • Реализация ограничений, включающих несколько атрибутов одновременно, является более сложной

  • и т.д.

Если для вас это не проблема, вы можете использовать EAV design.

...