web-dev-qa-db-fra.com

FAIT TABLE DES TRÈS ÉTRANGÈRES NULL?

Je suis nouveau à la conception de Data Mart et je dois effacer quelques concepts.

J'ai un peu lu la modélisation de la dimension où je vois que les tables de fait stockent des références de clé étrangère aux tables de dimensions.

Supposons maintenant que j'ai une table de dimension de phonenumber et une table de dimension téléphonique. (Ces tables ont des détails différents en raison de laquelle je ne peux pas les combiner)

Si je comprends, ces deux tables de dimensions auront des clés principales entière pour de meilleures performances, et la table des faits aura sa propre clé primaire entier et stockera également des références de clé étrangère à ces tables de dimensions.

Mais supposons avoir une situation que tous les numéros de téléphone ne sont pas liés au téléphone. (Certains numéros de téléphone n'ont pas besoin d'extension)

Pour les numéros de téléphone qui ont une extension, la table de fait aurait des références de clé étrangère aux tables de dimensions, mais comment puis-je capturer la situation dans laquelle il n'y a que des numéros de téléphone et aucune extension (et vice versa, c'est-à-dire une extension sans phonumbers) ?

Devrais-je capturer de telles informations avec le phonenumber FK dans la table des faits ayant une valeur et une clé étrangère téléphonique NULL ?? Ou sont-ils tels que des objets non liés non comptabilisés dans des tables de réalisation?

De plus, je dois générer un rapport de ce mart de données. Donc, puis-je commencer par interroger la table de fait et récupérer les valeurs de la clé de la dimension ou le rapport directement de la table de dimension?

Merci pour votre temps en lisant ça !!
[.____] Appréciez toute aide !!

8
akotian

Vous pouvez laisser le FK à certaines tables de dimensions comme null si ces dimensions ne sont pas connues ou non applicables. Il vous suffit de vous rappeler d'utiliser des jointures extérieures lorsque vous faites votre requête de rapport.

Sinon, certaines personnes créent un dossier de dimension "Aucun" et/ou "N/A" pour les dimensions de Data Mart, puis renseignent la table de faits FKS pour pointer ces points plutôt que d'utiliser des nulls. Les gens qui le font comme cette approche parce qu'ils ont une aversion pour les jointures extérieures.

Les personnes qui utilisent Null FKS en fait des tables d'information ont généralement une aversion pour les personnes qui ont une version aux jointures extérieures. ;) (En d'autres termes, il s'agit d'une question stylistique qui peut générer des guerres religieuses)

Je dis faire quelle que soit votre préférence, mais choisissez une approche et tenez-la avec ferveur.

10
Joel Brown

Ne mettez pas NULLS dans l'entrepôt ou dans les Marts.

L'entrepôt doit être bien normalisé (au moins BCNF) et devrait donc exclure les nuls. Les nulls peuvent être préservés dans des tables de mise en scène s'ils existent dans des sources de données, mais elles ne devraient pas être nécessaires dans l'entrepôt lui-même.

Les Marts devraient être conçus pour prendre en charge les outils de présentation et les requêtes d'utilisateurs. Les NULLS viennent de gêner ces choses parce qu'elles ne sont jamais affichées et que les interrogations utilisent des interrogations d'utilisateurs plus complexes et des erreurs - surtout dans les colonnes de clés étrangères qui sont fréquemment soumises à des jointures.

10
nvogel

les clés de dimension en faits ne doivent pas être nulles et IMHO disposer de FK aux dimensions pour éliminer le besoin de jointures extérieures gauche par les utilisateurs finaux, les rapports, etc. Toutes les charges de faits doivent faire une jointure extérieure gauche à la dimension et à la valeur par défaut à une touche 0 ou Pas de clé du tout et échouez. Mieux vaut échouer que de faire une jointure à la dimension et je n'ai aucune idée que vous avez manqué des rangées dans votre fait, jusqu'à ce que certains utilisateurs le trouvent enfin (si cela se passe jamais)

créez un enregistrement "N/A" dans la dimension téléphonique_extension et liez-y.

ma règle de Thembe est la seule valeur nullable dans une Datamart d'extrémité DWH. Le fait lui-même, de sorte que les fonctions globales telles que AVG fonctionnent toujours.

0
Ab Bennett