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!

questionAnswers(1)

yourAnswerToTheQuestion