Quels sont les avantages / inconvénients de la dé-normalisation d'une base de données d'applications d'entreprise, car il facilitera les rapports d'écriture? P>
Pro - Les rapports de conception en SSRS seront probablement "plus faciles" car aucune jointure ne sera nécessaire. P>
Con - développer / maintenir l'application pour gérer des données de normalisation de la non normalisées deviendra plus difficile en raison de la duplication des données et de la synchronisation. P>
Autres? P>
6 Réponses :
La seule fois que vous devriez envisager De-Normaliozation, c'est lorsque le moment il faut le rapport pour générer n'est pas acceptable. La dés-normalisation entraînera des problèmes de coélecte parfois impossibles à déterminer en particulier dans de grands ensembles de données p>
Je serais d'accord et ajoutais: Si vous allez désaxaliser, vous devez également vous assurer de définir une procédure ou un processus pour vous assurer que toutes les données dés-normalisées sont conservées en synchronisation et à jour.
La dénormalisation pour des rapports est mauvaise, M'Kay. P>
Créer des vues ou un entrepôt de données dénormalisé est bon. p>
Les vues ont résolu la plupart de mes besoins connexes sur les rapports. Les entrepôts de données sont excellents lorsque les utilisateurs généreront des rapports presque constamment ou lorsque vos points de vue commencent à ralentir. p>
C'est pourquoi vous souhaitez normaliser votre base de données P>
- libérer la collecte des relations de dépendances indésirables d'insertion, de mise à jour et de suppression; li>
- Pour réduire la nécessité de restructurer la collecte de relations en tant que nouveaux types de données sont introduites et augmente ainsi la durée de vie des programmes d'application; li>
- Pour rendre le modèle relationnel plus instructif aux utilisateurs; li>
- Pour faire la collecte des relations neutres aux statistiques de la requête, où ces statistiques sont susceptibles de changer au fil du temps. li> ol>
-e.f. DOCD, "Suite de la normalisation du modèle relationnel de base de données" via Wikipedia P> blockQuote>
La vue n'est pas toujours la solution, même si beaucoup les recommandent. Si vous avez une jointure complexe en raison d'une conception de base de données hautement normalisée, le temps d'exécution pour une vue peut devenir inacceptable.
Je suis d'accord avec Irwin, les vues ne vous aideront pas si la question est la performance
Ensuite, allez avec un entrepôt de données. Off Chargement de votre rapport sur un autre serveur de base de données est une bonne idée de toute façon.
La question ne mentionnait rien des problèmes de performance, seulement que ne pas avoir à faire des jointures ferait des choses "plus faciles", alors les vues semblent certainement la bonne approche dans ce cas.
C'est juste son pro, pas une exigence de l'État
Irwin a raison. J'aimerais connaître autant de pros et de contre comme je peux. Les performances normalisées peuvent être un con; Cependant, je sais que cela peut parfois être un pro car la normalisation peut créer des ensembles de résultats beaucoup plus petits.
Si votre RDBMS prend en charge les vues matérialisées, les performances ne sont plus un conditionnement non plus, mais un entrepôt de données dédié sur une machine distincte est toujours un meilleur choix.
Un autre con est que les données ne sont probablement pas en temps réel, car il y a un certain temps autour des données pour passer d'une forme normalisée à une non normalisée. Si quelqu'un veut que le rapport soit jusqu'à la seconde, il a été demandé, cela peut être difficile à faire dans cette situation. P>
S'il s'agit d'une duplication de la synchronisation dans le poste d'origine, désolé, je ne l'ai pas vraiment vu de cette façon. P>
En fait, la question n'était pas une dés-normalisation juste dans le temps. Mais réellement la normalisation des structures de manière permanente. C'est ce que j'ai été invité à faire.
Mon intention était que certaines exigences relatives aux rapports puissent changer au fil du temps et, tandis que le rapport peut actuellement généré pour chaque mois ou par trimestre, quelqu'un peut souhaiter obtenir les données data et donc le dilemme est né.
Je vois. Pour le moment, les rapports sont en temps réel via SSRS Report Viewer. Les utilisateurs ont un tas de déposées et de champs à travers lesquels ils peuvent changer de paramètre et ré-exécuter à leur caprice. Notre modèle normalisé actuel n'a pas de problèmes de performance avec ce processus en temps réel.
Ne dénormez pas simplement pour vous débarrasser de la complexité dans les rapports, cela peut entraîner des problèmes énormes dans le reste de la demande. Soit vous n'appliquez pas les règles qui entraînent des données incorrectes ou si vous les insérons, les suppressions et les mises à jour peuvent être sérieusement ralenties pour tout le monde, pas seulement les deux ou trois personnes qui exécutent des rapports. P>
Si les rapports ne peuvent vraiment pas bien s'exécuter, créez un entrepôt de données qui le dénormalisent et le peuplent dans une alimentation nocturne ou hebdomadaire. Le type de rapports qui nécessitent généralement cela ne se soucient généralement pas que les données soient à la minute, car elles sont généralement des rapports mensuels, trimestriels ou annuels qui traitent (et surtout globalement) de grandes quantités de données après le fait. p>
Vous pouvez faire les deux ... Laissez la base de données normalisée pour les applications. Ensuite, créez une base de données dénormalisée pour les rapports et créez une application qui réglementaire Copiez des données d'une base de données à l'autre. P>
Après tout, les rapports n'ont pas toujours besoin d'avoir les dernières données mises à jour, la plupart du temps, vous pouvez facilement lancer une mise à jour toutes les 1 heure sur la base de données de reporting et une fois par jour. P>
au-delà des solutions d'entrepôt de données et de vues fournies dans d'autres réponses, qui sont bonnes à certains égards, si vous êtes prêt à sacrifier certaines performances pour obtenir un bon à la dernière seconde Data, mais vous voulez toujours une base de données normalisée, vous pouvez utiliser Sur Oracle une vue matérialisée avec rafraîchissement rapide sur COMMITE ou SQL Server, vous pouvez utiliser des index en cluster pour une vue. P>
Je ne considère pas vraiment la dés-normalisation pour des raisons de rapports. Je construis un argument pour que je n'ai pas à devoir.
La normalisation rend la mise en place de données dans une base de données beaucoup plus facile (y compris les coûts, comme pour vous assurer que tout est cohérent). La dénormalisation facilite l'obtention des données d'une base de données.