Проектирование хранилища данных - как составить таблицу фактов?

Я новичок в DW, и мне нужно создать очень простой склад для сайта электронной коммерции.

Таблицы размеров

  • таблица измерения даты (id, год, квартал, месяц, день)
  • таблица измерения времени (id, час, минута)
  • таблица параметров продукта (идентификатор, название продукта, цена, идентификатор категории)
  • таблица измерений категории продукта (id, название категории)

Таблица фактов

  • продажи по продукту (идентификатор даты, идентификатор продукта, количество продаж, сумма цены)

Эта таблица фактов подходит для вопросов типа "Сколько продуктов было продано в июне" и т. Д.

Но мне нужно будет ответить на такие вопросы, как "В какой категории было продано больше всего продуктов в июне?" или "Какой самый успешный час дня в среду?".

Я вижу две возможности:

  1. Я могу добавить новый столбец (идентификатор категории или идентификатор времени) в таблицу фактов продукта. Но этот идентификатор изменит гранулярность таблицы
  2. Я могу создать другую таблицу фактов для категорий, которая будет содержать факты о категориях. Но это (на мой взгляд) тратит место на диске, не так ли?

Какая возможность верна?

3 ответа

Ваша таблица фактов продаж должна быть по позиции заказа

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

Почему бы вам просто не добавить название категории в dim_product?

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

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

А дисковое пространство довольно дешево по сравнению с усилиями по переделке.

Другие вопросы по тегам