Escolher entre os tipos de dimensão de alteração lenta

Concluído

A teoria do design do esquema em estrela refere-se aos tipos comuns de SCD. Os mais comuns são o Tipo 1 e o Tipo 2. Na prática, uma tabela de dimensões pode dar suporte a uma combinação de métodos de acompanhamento de histórico, incluindo o Tipo 3 e o Tipo 6. Vamos conhecer a diferença entre esses tipos de SCD.

SCD do Tipo 1

Uma SCD do Tipo 1 sempre reflete os valores mais recentes e, quando são detectadas alterações nos dados de origem, os dados da tabela de dimensões são substituídos. Essa abordagem de design é comum para colunas que armazenam valores suplementares, como o endereço de email ou o número de telefone de um cliente. Quando um endereço de email ou um número de telefone do cliente muda, a tabela de dimensões atualiza a linha de cliente com os novos valores. É como se o cliente sempre tivesse essas informações de contato. O campo-chave, como CustomerID, permaneceria o mesmo para que os registros na tabela de fatos sejam vinculados automaticamente ao registro do cliente atualizado.

An example Type 1 SCD row that updates CompanyName and ModifiedDate.

SCD do Tipo 2

Uma SCD do Tipo 2 é compatível com o controle de versão dos membros da dimensão. Frequentemente, o sistema de origem não armazena versões, de modo que o processo de carga do data warehouse detecta e gerencia alterações em uma tabela de dimensões. Nesse caso, a tabela de dimensões deve usar uma chave substituta para fornecer uma referência exclusiva a uma versão do membro da dimensão. Ele também inclui colunas que definem a validade do intervalo de datas da versão (por exemplo, StartDate e EndDate) e, possivelmente, uma coluna de sinalizador (por exemplo, IsCurrent) para filtrar facilmente por membros da dimensão atual.

Por exemplo, a Adventure Works atribui vendedores a uma região de vendas. Quando um vendedor realoca a região, uma nova versão do vendedor deve ser criada para garantir que os fatos históricos permaneçam associados à região anterior. Para dar suporte à análise histórica precisa das vendas por vendedor, a tabela de dimensões deve armazenar versões de vendedores e suas regiões associadas. A tabela também deve incluir valores de data de início e de término para definir a validade do tempo. Versões atuais podem definir uma data de término vazia (ou 31/12/9999), que indica que a linha é a versão atual. A tabela também deve definir uma chave substituta, pois a chave comercial (neste caso, ID de funcionário) não será exclusiva.

An example Type 2 SCD row that shows a new record for Region change.

É importante entender que, quando os dados de origem não armazenam versões, você deve usar um sistema intermediário (como um data warehouse) para detectar e armazenar as alterações. O processo de carregamento de tabela deve preservar os dados existentes e detectar alterações. Quando uma alteração é detectada, o processo de carregamento de tabela deve expirar a versão atual. Ele registra essas alterações atualizando o valor EndDate e inserindo uma nova versão com o valor StartDate começando do valor EndDate anterior. Além disso, os fatos relacionados devem usar uma pesquisa baseada em tempo para recuperar o valor da chave de dimensão relevante para a data do fato.

SCD do Tipo 3

Uma SCD do Tipo 3 dá suporte ao armazenamento de duas versões de um membro da dimensão como colunas separadas. A tabela inclui uma coluna para o valor atual de um membro mais o valor original ou anterior do membro. Portanto, o Tipo 3 usa colunas adicionais para acompanhar uma instância-chave do histórico em vez de armazenar linhas adicionais para acompanhar cada alteração, como em uma SCD do Tipo 2.

Esse tipo de acompanhamento pode ser usado para uma ou duas colunas em uma tabela de dimensões. Não é comum usá-lo para muitos membros da mesma tabela. Frequentemente, ele é usado em combinação com membros do Tipo 1 ou do Tipo 2.

An example Type 3 SCD row that shows an updated CurrentEmail column and an unchanged OriginalEmail column.

SCD do Tipo 6

Uma SCD do Tipo 6 combina os Tipos 1, 2 e 3. Quando uma alteração ocorre em um membro do Tipo 2, você cria uma linha com a StartDate e a EndDate apropriadas. No design do Tipo 6, você também armazena o valor atual em todas as versões da entidade para que possa relatar facilmente o valor atual ou o valor histórico.

Usando o exemplo de região de vendas, você divide a coluna Região em CurrentRegion e HistoricalRegion. A CurrentRegion sempre mostra o valor mais recente e a HistoricalRegion mostra a região que era válida entre StartDate e EndDate. Sendo assim, para o mesmo vendedor, cada registro teria a região mais recente populada em CurrentRegion, enquanto HistoricalRegion funciona exatamente como o campo de região no exemplo de SCD do Tipo 2.

An example Type 6 SCD row that shows a new record for Region change with CurrentRegion updated for old and new row.