¿Cómo crear una tabla de hechos de historia?

Tengo algunas entidades en mi Data Warehouse:

Person: con los atributos personId, dateFrom, dateTo y otros, se pueden cambiar, p. apellido, fecha de nacimiento, etc. - dimensión que cambia lentamente

Document - documentId, número, tipo

Habla - addressId, ciudad, calle, casa, piso

Las relaciones entre (Persona y Documento) son Uno a Muchos y (Persona y Domicilio) son Muchos a Muchos.

Mi objetivo es crear una tabla de hechos del historial que pueda respondernos las siguientes preguntas:

¿Qué personas con qué documentos vivían en una dirección definida en una fecha definida?

2, ¿Qué historial de residentes tiene la dirección definida en un intervalo de tiempo definido?

Esto no es solo para lo que DW está diseñado, sino que creo que es lo más difícil en el diseño de DW.

Por ejemplo, Miss Brown con personId = 1, los documentos con documentId = 1 y documentId = 2 se vivieron en la dirección con addressId = 1 desde el 01/01/2005 al 02/02/2010 y luego se trasladaron a addressId = 2 donde vivido desde el 02/03/2010 hasta la fecha actual (NULL?). Pero había cambiado su apellido a la Sra. Green desde el 05/04/2006 y su primer documento con documentId = 1 a documentId = 3 desde el 06/07/2007. Mr Black con personId = 2, documentId = 4 se ha vivido en addressId = 1 desde el 02/03/2010 hasta la fecha actual.

El resultado esperado en nuestra consulta para la pregunta 2 donde addressId = 1, y el intervalo de tiempo es desde 01/01/2000 hasta ahora, debe ser como:

Filas:

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

uve la idea de crear una tabla de hechos con clave compuesta (personId, documentId, addressId, dateFrom) pero no tengo idea de cómo cargar esta tabla y luego obtener el resultado esperado con esta estructura.

Me complacerá cualquier ayuda!

Respuestas a la pregunta(1)

Su respuesta a la pregunta