Tenho vários bancos de dados que desejo armazenar em um banco de dados de data warehouse. Eu estou querendo saber como eu projeto o processo de importação para lidar com várias tabelas de pesquisa.
Por exemplo, digamos que eu tenha 5 bancos de dados, todos com a tabela de pesquisa CustomerState. Em um datatabse pode parecer assim:
Em outro banco de dados, poderia ficar assim:
Como devo lidar com isso na minha camada corporativa do meu banco de dados DW? Devo adicionar um SourceSystemId à tabela de pesquisa, talvez algo assim:
E então usar o pkyCustomerStateId na minha tabela Customer em vez do CustomerStateId?
Esse tipo de coisa deve ser tratado pelo processo ETL que traz os dados para o data warehouse. Na verdade, esse processo é o T em ETL.
O que você precisa fazer primeiro é definir a (s) coluna(s) de chave lógica das tabelas, para que o significado comercial das linhas possa ser igualado entre os bancos de dados. Uma chave de várias colunas como você propõe complicaria as coisas e realmente não resolveria o problema.
Para este exemplo, eu definiria
CustomerState
como a coluna de chave lógica na dimensão e, quando as tabelas separadas fossem mescladas, essa coluna seria única no resultado, com novosCustomerStateId
valores atribuídos. Isso garante que a chave primária da dimensão seja a mais estreita possível, o que será transferido para as tabelas de fatos e as tornará o mais estreitas possível também.O processo ETL pode fazer algo assim (supondo que a
CustomerStateId
coluna da tabela de destino seja umaIDENTITY
coluna):(O motivo pelo qual usei
MERGE
em vez deINSERT
é que em outras dimensões você pode precisar fazer atualizações também; não neste caso, pois não há outras colunas.)Em seguida, o processo de carregamento da tabela de fatos usaria um mecanismo de pesquisa (Transformação de pesquisa no SSIS) para ir do
CustomerState
valor lógico para o valor recém-atribuídoCustomerStateid
gerado pela instrução acima.