Tabla de hechos claves externas nulo?

9

Soy nuevo en el diseño de data mart y necesito aclarar algunos conceptos.

He leído un poco sobre el modelado de dimensiones donde veo que las tablas de hechos almacenan referencias de claves externas a las tablas de dimensiones.

Ahora supongamos que tengo una tabla de dimensiones de número telefónico y una tabla de dimensiones de extensión de teléfono. (Estas tablas tienen detalles diferentes por lo que no puedo combinarlas)

Según tengo entendido, ambas tablas de dimensiones tendrán claves primarias enteras para un mejor rendimiento, y la tabla de hechos tendrá su propia clave primaria entera y también almacenará referencias de claves externas a estas tablas de dimensiones.

Pero supongamos que tengo una situación en la que no todos los números de teléfono tienen una extensión de teléfono relacionada con ellos. (algunos números de teléfono no necesitan tener una extensión)

Para los números de teléfono que tienen una extensión, la tabla de hechos tendría referencias de claves externas a ambas tablas de dimensiones, pero ¿cómo puedo capturar la situación en la que solo hay números de teléfono y no hay extensión para ellos (y viceversa, es decir, extensión sin números de teléfono)? ?

¿Debo capturar dicha información con el número de teléfono FK en la tabla de hechos que tiene un valor y una clave externa de phone_extension nulo? ¿O tales objetos no relacionados no se registran en tablas de hechos?

También necesito generar un informe de este data mart. Entonces, ¿empiezo consultando la tabla de hechos y recuperando los valores clave de dimensión o el informe directamente desde la tabla de dimensiones?

Gracias por tu tiempo leyendo esto !!
Agradezco cualquier ayuda !!

akotian
fuente
posiblemente una pregunta por defecto del servidor?

Respuestas:

10

Puede dejar el FK en algunas tablas de dimensiones como NULL si esas dimensiones no se conocen o no son aplicables. Solo debe recordar utilizar combinaciones externas cuando realice su consulta de informes.

Alternativamente, algunas personas crean un registro de dimensión "ninguno" y / o "n / a" para las dimensiones del data mart y luego completan los FK de la tabla de hechos para señalarlos en lugar de utilizar NULL. A las personas que hacen esto les gusta este enfoque porque sienten aversión a las uniones externas.

Las personas que usan NULL FK en tablas de hecho generalmente tienen aversión a las personas que tienen una versión para las uniones externas. ;) (en otras palabras, este es un tema estilístico que puede generar guerras religiosas)

Le digo que haga lo que prefiera, pero elija un enfoque y manténgalo fervientemente.

Joel Brown
fuente
10

No ponga nulos en el Almacén o en los Marts.

El almacén debe estar bien normalizado (al menos BCNF) y, por lo tanto, debe excluir los valores nulos. Los nulos pueden conservarse en las tablas de preparación si existen en las fuentes de datos, pero no deberían ser necesarios en el propio almacén.

Marts debe estar diseñado para admitir herramientas de presentación y consultas de los usuarios. Los valores nulos simplemente se interponen en el camino de esas cosas porque nunca se muestran y hacen que las consultas de los usuarios sean más complejas y propensas a errores, especialmente en columnas de clave externa que con frecuencia están sujetas a uniones.

nvogel
fuente
Estoy de acuerdo, pero por la razón citada por Brown: es muy valioso tener registros sintéticos explícitos por la razón de que el campo sería NULO. NULL no les dice nada a los usuarios; "El valor no se pudo analizar", "El campo se dejó en blanco" o "No se ha asignado ningún ejecutivo de cuenta todavía" es útil.
Jon of All Trades
0

Las claves de dimensión en los hechos no deben ser nulas y, en mi opinión, tener fk's en las dimensiones para eliminar la necesidad de uniones externas izquierdas por parte de los usuarios finales, informes, etc. sin llave en absoluto y falla. Es mejor fallar que unirse a la dimensión y no tener idea de que perdió filas en su hecho, hasta que algunos usuarios finalmente lo encuentren (si eso sucede)

cree un registro "n / a" en la dimensión phone_extension y vincúlelo.

mi regla de themb es el único valor anulable en un dwh end datamart es el hecho en sí mismo, por lo que las funciones agregadas como avg todavía funcionan.

Ab Bennett
fuente