Como criar uma tabela de fatos históricos?
Tenho algumas entidades no meu Data Warehouse:
Pesso - com os atributos personId, dateFrom, dateTo e outros que podem ser alterados, por exemplo sobrenome, data de nascimento e assim por diante - alterando lentamente a dimensão
Document - documentId, número, tipo
Endereç - addressId, cidade, rua, casa, apartamento
As relações entre (Pessoa e Documento) são Um para Muitos e (Pessoa e Endereço) são Muitos para Muito
Meu objetivo é criar uma tabela de fatos históricos que possa nos responder as seguintes perguntas:
Quais pessoas com quais documentos moravam em endereço definido em data definida?2, que histórico de residentes o endereço definido possui em um intervalo de tempo definid
Isso não é apenas para o que o DW foi projetado, mas acho que é a coisa mais difícil no design do D
Por exemplo, Miss Brown com personId = 1, documentos com documentId = 1 e documentId = 2 foram armazenados no endereço com addressId = 1 desde 01/01/2005 a 02/02/2010 e depois foram movidos para addressId = 2 onde viveu desde 02/03/2010 até a data atual (NULL?). Mas ela havia mudado o sobrenome para Mrs. Green desde 05/05/2006 e seu primeiro documento com documentId = 1 para documentId = 3 desde 07/06/2007. Sr. Black com personId = 2, documentId = 4 vive em addressId = 1 desde 02/03/2010 até a data atual.
O resultado esperado em nossa consulta para a pergunta 2, em que addressId = 1 e o intervalo de tempo desde 01/01/2000 até agora, devem ser como:
Rows:
last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006
last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006
last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007
last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007
last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010
last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010
last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL
Eu tive uma idéia para criar tabela de fatos com chave composta (personId, documentId, addressId, dateFrom), mas não tenho idéia de como carregar esta tabela e obter o resultado esperado com essa estrutur
Terei prazer em qualquer ajuda!