Tengo algunas entidades en mi almacén de datos:¿Cómo crear una tabla histórica de hechos?
persona - con los atributos personId, dateFrom, dateTo, esos y otros se puede cambiar, por ejemplo, apellido, fecha de nacimiento y así sucesivamente - que cambia lentamente dimensión
Documento - documentId, número, tipo
Dirección - AddressID, ciudad, calle, casa, piso
Las relaciones entre (persona y documento) son de uno a muchos y (persona y dirección) es de muchos a muchos.
Mi objetivo es crear la historia tabla de hechos que nos pueden responder a las preguntas siguientes:
- lo que las personas con lo que los documentos vivían en la dirección definida en la 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, pero 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 han vivido en la dirección con addressId = 1 desde 01/01/2005 al 02/02/2010 y luego se movieron a addressId = 2 donde se ha vivido desde el 02/03/2010 hasta la fecha actual (¿NULO?). Pero cambió su apellido a Mrs Green desde el 4/05/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 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 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
que tenía una idea para crear tabla de hechos con la clave compuesta (personId, documentId, addressId, dateFrom) pero no tengo idea de cómo cargar esta tabla y luego obtener ese resultado esperado con esta estructura.
Estaremos encantados de recibir ayuda.
@Marcus D Gracias. Pensé similar pero sin las claves de "k" en la tabla de hechos (¿Entendí bien sus nombres? KcPerson - clave sustituta para identificar una fila, y kPerson - clave natural para identificar a una persona?). – Argnist
Pero FactHistory (FKs = kcPerson, kPerson, kcDocument, kDocument, kcAddress, kAddress, kDateFrom, kDateTo) indica que tenemos que actualizar los datos antiguos 'kDateTo - esto no es bueno, pensé. Puede ser mejor tener un kDateFrom ... Y una pregunta más. Escriba 2 scd en DimDocument o DimAddress - para el conjunto de documentos/direcciones de una Persona o qué? – Argnist
@Argnist. usaríamos dos claves suplentes enteras kcPerson y kPerson.kperson sería una clave sustituta que apunta al individuo único (independientemente de los cambios de nombre/cambios de género, etc.), kcperson sería una clave sustituta que apunta a la instancia específica de esa persona (su nombre/género específico, etc.). Comprueba el enlace que incluí. No conservamos las llaves naturales en las tablas de hechos. siempre las claves sustitutas - mucho más rápido, también soluciona el problema cuando los usuarios de su negocio quieren cambiar el nombre natural de la clave, pero conservan un enlace al historial (¡sí, sí lo hemos tenido!) –