Расширяющиеся Bens немного согласны с предостережением, что нет правильного ответа на хранилище данных - это экспансивная, облачная область ИТ с большим количеством школ мысли. Вот одно из возможных направлений, которым вы можете преследовать.
Предположения: 1) У вас есть две отдельные исходные базы данных как с двумя таблицами: Продукт и продажи 2) Отдельная база данных источника isloated и может иметь конфликтующие данные первичного ключа. 3) Вы хотите, чтобы версия [1] отображалась как в продуктах, так и в таблицах продаж. Это важное предположение, поскольку в основном таблицы фактов не обновляются, и таблица продаж звучит так, как будто она принадлежит к таблице статических фактов.Ваш вопрос неясен, если вы ожидаете изменений в продажах, поэтому я предполагаю, что вы будете 4) В отчете о продажах может быть только один продукт (это маловероятно, но на ваш вопрос упоминается только 2 таблицы, 1-многим будет включать в себя более тонкой настройки вокруг стола мостиком)
Склад Дизайн:
Вам потребуется 3 таблицы со следующими столбцами:
PRODUCT_DIM
- PRODUCT_SK (суррогатного первичного ключ базы данных хранилища данных генерируется)
- SOURCE_SYSTEM_ID (специфический индикатор DW, какой исходной базы данных OLTP записи был получен из - может быть строка, если вам нравится)
- PRODUCT_NK (PK из продукт от исходной системы, используемой для операций SCD)
- DATE_FROM (Запись активна с)
- DATE_TO (Запись активна в нуль (для тока))
- PRODUCT_NAME (название продукта для исходной таблицы)
- Другие столбцы (Любые другие столбцы продукции вам может понадобиться)
ПРОДАЖ DIM - SALES_SK (суррогатного первичного ключа хранилища данных сгенерировано с помощью базы данных) - SOURCE_SYSTEM_ID (конкретный индикатор DW, в отношении которого исходная база данных OLTP выводилась из источника - может быть строкой, если хотите) - SALES_NK (ПК записи продаж от исходной системы, используемой для операций SCD) - DATE_FROM (Запись активна с) - DATE_TO (Запись активна к (нуль для тока)) - SALE_AMOUNT (имя продукта для исходной таблицы) - Другие столбцы (Любые другие торговые столбцы, которые могут потребоваться)
PRODUCT_SALES_BRIDGE - PRODUCT_SK (составной первичный ключ) - SALES_SK (составной первичный ключ) - DATE_FROM (Запись активна с) - DATE_TO (запись активна в (нулевое значение для тока))
Основные вещи, чтобы обратите внимание на идентификаторы в тусклых таблицах SALES и PRODUCT.
Существует столбец «Естественный ключ» для хранения каждого значения первичного ключа каждой записи как именно того, что находится в исходной системе.
Поскольку вы заявили, что у вас несколько исходных систем, необходим дополнительный столбец SOURCE_SYSTEM_ID, чтобы вы могли сопоставлять записи из нескольких исходных систем с их эквивалентной записью на вашем складе. В противном случае у вас может быть продукт EGGS с идентификатором 13 в вашей первой исходной системе и продукт под названием MILK с идентификатором, также равным 13 во второй системе. Без дополнительной SOURCE_SYSTEM_ID вы будете навсегда резки записи для PRODUCT_DIM естественного ключа 13. Это будет выглядеть Somthing как это на вашем складе:
PRODUCT_SK SOURCE_SYSTEM_ID PRODUCT_NK .. PRODUCT_NAME
..
14 1 13 .. EGGS
15 2 13 .. MILK
..
существует таблица моста, чтобы предотвратить вырубку новых ПРОДАЖ или PRODUCT записи каждый раз, когда их связанный запись изменений. Рассмотрим продажу 10 $ с красными яйцами. Следующие данные, продукт Red Eggs переименовываются в «Супер красные яйца». Это приведет к появлению новой записи о запасах для красных яблок на складе. Если таблица SALES включала прямую ссылку на PRODUCT_SK, новая запись SALES была бы разрезана исключительно потому, что для наших красных яблок появился новый продукт SK. Стол моста перемещает ссылочную целостность, вызванную резкой новой записи из таблицы DIMENSION/FACT в таблицу моста. Это также добавило преимущества для новых пользователей в хранилище данных, которые прекрасно понимают, что они работают с другим мышлением с традиционной РСУБД.
2 столбца Natural Key должны помочь вам решить свой первоначальный вопрос, таблица моста является только личным предпочтением и добавлена для полноты. Если у вас есть дизайн DW, который уже работает для вас, придерживайтесь его.
[1] Иной вариант использования означает, что вы медленно меняете методологию измерения. Большинство людей дешево и просто Type2 все их таблицы «на всякий случай»
Процесс ETL должен нормализовать/отобразить идентификационные ключи продукта в единую таблицу продуктов на складе. Это ** ** работа процесса ETL. – PaulProgrammer