Digamos que eu tenha um banco de dados OLTP simples com pedidos, produtos e clientes:
E a partir dele, estou construindo um data mart com uma tabela de fatos de pedidos, dimensão de produto, dimensão de cliente e dimensão de data:
Ao carregar a tabela de pedidos em fact_orders (digamos que eu estivesse usando uma transformação de pesquisa SSIS para atribuir as chaves substitutas), isso significa que a fonte de dados para os pedidos também precisaria ter os valores naturais de "chave estrangeira" que foram associados com o pedido no sistema OLTP?
Em outras palavras, os dados que estão sendo carregados viriam de uma consulta como essa?
SELECT
order_date, -- needed to get date surrogate key
customer_name, -- needed to get customer surrogate key
product_name, -- needed to get product surrogate key
order_number, -- denegenerate dimension,
qty_ordered AS order_qty, -- measure
total_amount AS order_amount -- measure
FROM orders o
INNER JOIN customers c
ON o.customer_id = c.customer_id
INNER JOIN products p
ON o.product_id = p.product_id
Não tenho certeza se você precisa de chaves "naturais", mas provavelmente precisa manter um tipo de mapeamento de chaves. Portanto, você precisa entender quais relacionamentos são mapeados entre seus sistemas de origem e destino, identificar as chaves para esses relacionamentos e criar seus mapeamentos de chaves a partir daí.
Eu tinha uma pergunta anterior sobre isso chamada "Qual é a melhor prática para mapear de chaves naturais para chaves baseadas em números inteiros? (ETL)" .