Ma table de faits contient un score utilisateur dans un cours qu'il a suivi. Certains des détails du cours, que je dois montrer sur le rapport, proviennent de plus d'une table (dans la base de données OLTP réelle). Est-ce que je crée une version non normalisée de cette entrée de cours dans une table de dimension?
Ou est-ce que je rejoins la table des faits directement à la table de cours rejoindre les autres tables qui décrivent ce cours (type_cours, faculté qui a créé ce cours etc)Comment éviter les jointures complexes dans le schéma en étoile?
Répondre
Peut-être que je ne comprends pas votre question, mais une table de faits dans un schéma en étoile est supposé être joint aux tables de dimension qui l'entourent. Si vous n'avez pas envie de créer des jointures, créez simplement une vue et utilisez la vue pour générer des rapports.
Si vous deviez poster un modèle (schéma), il serait plus facile de commenter/aider.
Les flocon de neige ou les tables de bridge rendent les jointures plus compliquées, et pas seulement du point de vue du codage, elles simplifient également les choses pour les utilisateurs BI.
Dans la plupart des cas, je les mettrais directement dans des tables de dimensions existantes ou supplémentaires. Par exemple, vous avez une table de faits sur les scores, qui contient les détails de l'utilisateur dans une dimension qui peut ou non contenir des données démographiques sur l'utilisateur (peut-être seulement un pont). Parfois, il est préférable de séparer les informations démographiques. Ainsi, même si le genre et l'âge peuvent être associés à une entité utilisateur, dans le modèle dimensionnel, il peut s'agir de dimensions individuelles ou regroupées en une seule dimension, selon les scénarios d'utilisation. Peut-être que vos scores sont attachés à un état et que les états ont des régions (flocon de neige). Il pourrait être beaucoup plus efficace pour l'analyse de faire directement correspondre la dimension de la région au lieu de passer par la dimension de l'État.
Je pense que vous trouverez que le modèle dimensionnel est une approche de dénormalisation très pragmatique. Les principales choses qui ne sont pas négociables sont les faits - après cela le choix des dimensions est très influencé par le comportement des données, votre prévoyance pour les scénarios d'utilisation courants - et évitant de tomber dans les trop petites dimensions et trop de problèmes de dimensions.
Il est courant de consolider plusieurs dimensions ensemble, en sacrifiant la normalisation au profit de la performance. Cela est généralement effectué lorsque votre requête type nécessite toutes les dimensions ensemble (par opposition à l'utilisation de bits différents pour différents cas d'utilisation).
Rappelez-vous aussi que si vous recevez une réduction de joindre les frais généraux, il y a quelques inconvénients:
- perte de flexibilité, ce qui pourrait entraver le développement que l'entrepôt se développe
- scans de table complets prennent plus de temps (en traditionnel SGBDR basée sur les lignes telles que SQL Server)
- de consommation d'espace disque
Vous devrez examiner chaque cas séparément.
Il peut être utile d'envisager également la possibilité de créer une vue matérialisée, si cette possibilité est offerte par votre SGBDR.
Nous avons généralement un schéma de flocon de neige en tant que conception physique DWH, mais nous ajoutons une couche de vue de rapport qui aplatit le schéma de flocon de neige dans un schéma en étoile.De cette façon, votre cube OLAP devient beaucoup plus simple et facile à gérer.
- 1. Insérer dans un schéma en étoile
- 2. Comment éviter les complexTypes dans le schéma XML
- 3. Comment créer des modèles Rails avec plusieurs associations/jointures complexes?
- 4. Recherche de tables manquantes pour éviter les jointures croisées
- 5. Dois-je utiliser le mot-clé sql JOIN pour les jointures complexes sur plusieurs tables?
- 6. Que signifie * (étoile) dans Ruby?
- 7. Comment éviter ClassCastException dans les appels JMX avec des arguments complexes sur Websphere appserver
- 8. Comment éviter les requêtes imbriquées
- 9. comment changer/simplifier les jointures dans l'oracle
- 10. Comment éviter le curseur dans le serveur sql? veux aussi éviter tout en boucle
- 11. Django: Comment réduire les jointures internes sur l'héritage du modèle?
- 12. éviter les valeurs en double dans datatable
- 13. Comment éviter les paramètres?
- 14. SQL: 2 compte en utilisant les jointures?
- 15. MYSQL - limitant les jointures
- 16. Comment éviter les doublons?
- 17. Éviter les ressources en double dans le projet android
- 18. Comment éviter les fichiers thumbs.db en compression
- 19. Comment éviter les fuites de mémoire dans le rappel?
- 20. Java OpenGL dessine une étoile
- 21. Modèles dans les modèles. Comment éviter le rendu deux fois?
- 22. Comment recherchez-vous les jointures Right/Left?
- 23. RAII dans le schéma?
- 24. Comment éviter les messages morts dans le chat Comet?
- 25. Les auto-jointures entraînent-elles des pénalités de performances plus élevées que les jointures multi-tables?
- 26. Comment éviter les enregistrements en double dans MySQL
- 27. Comment activer les jointures entre bases de données dans mysql?
- 28. comment définir le dernier dans le schéma?
- 29. Filtre sur les jointures dans nHibernate
- 30. Comment éviter les valeurs nulles dans JasperReports
Je n'ai aucun problème avec une jointure d'une seule étape à une dimension. Mais disons que cette dimension contient d'autres clés étrangères, ce qui signifie que je dois joindre la table ** dimension ** à une table de recherche ou à d'autres tables. –
On dirait un design de flocon de neige. Rien de mal à cela, à condition que le concepteur DW avait une bonne raison de flocon de neige. –