Moi-même et un autre DBA de notre entreprise sont chargés d'examiner une conception de base de données qu'un fournisseur a développée pour nous. Le vendeur a déclaré qu'ils utilisaient Kimball comme base pour leur conception. (REMARQUE: je ne cherche pas d'arguments de Kimball vs Inmon, etc.) Ils ont conçu un magasin avec plusieurs faits et dimensions.
Maintenant, en toute équité, notre entreprise n'a jamais conçu un seul marché. Nous avons toujours demandé aux consultants de le faire. Et nous n'avons jamais été envoyés en cours ou quoi que ce soit. Donc, notre connaissance de l'entreposage / marts / modélisation dimensionnelle, etc. est basée sur le peu d'expérience que nous avons, ce que nous pouvons trouver sur Internet et la lecture personnelle (nous avons les livres d'Inmon et de Kimball et essayons de nous frayer un chemin à travers eux) .
Maintenant que la scène est prête pour mon niveau de connaissances, nous arrivons au défi du design.
Il existe un tableau de faits intitulé «Statistiques sur les sinistres» (il s'agit de l'assurance). Et ils essaient de capturer à la fois les paiements pour les réclamations (cumulés à un niveau mensuel), puis l'argent dans les réserves (un peu comme un compte bancaire pour les réclamations). Ils souhaitent voir les montants mensuels des paiements (pas de biggie). Mais ils souhaitent voir le solde courant des réserves.
Je vais donner un exemple pictural.
Supposons que nous ayons mis en place 1 000 USD de réserves pour une réclamation. Cela est mis de côté (donc à certains égards, il fonctionne un peu comme un compte bancaire).
En octobre 2014, nous ne payons encore rien. L'entreprise veut donc voir les paiements et le solde des réserves fin octobre.
-----------------------------------------------
- MONTH_YEAR - PAYMENTS - RESERVE_BALANCE -
-----------------------------------------------
- 102014 - 0.00 - 1000.00 -
-----------------------------------------------
Puis novembre arrive. Nous effectuons des paiements de 100 $, 150 $ et 75 $. Ils souhaitent voir ces montants agrégés et la réserve au solde comme suit:
-----------------------------------------------
- MONTH_YEAR - PAYMENTS - RESERVE_BALANCE -
-----------------------------------------------
- 102014 - 0.00 - 1000.00 -
-----------------------------------------------
- 112014 - 325.00 - 675.00 -
-----------------------------------------------
Et dire ensuite que nous n'avons aucun paiement en décembre et 200 $ de plus en janvier de l'année prochaine.
-----------------------------------------------
- MONTH_YEAR - PAYMENTS - RESERVE_BALANCE -
-----------------------------------------------
- 102014 - 0.00 - 1000.00 -
-----------------------------------------------
- 112014 - 325.00 - 675.00 -
-----------------------------------------------
- 122014 - 0.00 - 675.00 -
-----------------------------------------------
- 12015 - 200.00 - 475.00 -
-----------------------------------------------
Voici où je lutte. Je crois comprendre que la partie des paiements est correcte. Ils sont tous regroupés au niveau mensuel dans chaque enregistrement. Vous pouvez donc continuer à faire des rollups si vous le souhaitez pour l'année, le trimestre, etc.
Mais le montant des réserves est différent. C'est un équilibre. Et l'entreprise veut voir combien il en reste à chaque mois. Mais vous ne pouvez pas agréger sur ce champ. Si vous le faisiez, vous obtiendriez des résultats bancaux.
D'une certaine manière, cela me semble faux. Mais je ne peux pas dire en vérité que j'ai assez modélisé ou que j'en sais assez. Tout ce que je peux dire, c'est ce que je sais. Et d'après ce que je sais, toutes les valeurs d'un fait devraient être à la même granularité.
Les deux nombres sont à la même granularité d'un "mois", mais ils ne sont pas du point de vue de ce qu'ils représentent. La première consiste à cumuler des dollars dans un mois. L'autre n'est que l'équilibre.
Est-ce correct? J'ai repoussé cette conception. Ai-je tort de le faire? Est-ce correct de le faire dans un fait? Ou mon sens de "l'odeur de code" d'une mauvaise conception est-il précis?
Toute aide serait appréciée. REMARQUE: s'il vous plaît, ne dites pas simplement "cela devrait être le chemin X", veuillez expliquer pourquoi cela devrait être ainsi afin que je puisse en tirer des leçons.
EDIT : Eh bien, j'ai appris que ma compréhension initiale du fait est fausse. La granularité n'est PAS mensuelle. La granularité est au niveau de la transaction. Cela signifie donc qu'au cours de MONTH_YEAR (c'est-à-dire qu'il s'agit vraiment de la période de reporting financier), il y aura plusieurs transactions de paiement et de recouvrement. Ceux-ci seront affichés par date ou date de transaction. Mais à cause d'un rapport antérieur que l'entreprise voit, et aussi à cause de la façon dont les données sont stockées dans le système hérité dont elles proviennent, elles voulaient mettre à la fois les données transactionnelles (une ligne par) et le solde mensuel de réserve (une ligne par mois) ).
Une fois que j'ai appris cela, je me rends compte que le problème n'était pas tant additif vs non additif, ou même semi-additif que c'était du grain, ce que je soupçonnais depuis le début. Notre équipe DBA en a discuté avec l'équipe du projet et a indiqué qu'elle tentait de mettre deux grains différents dans le même fait, et ce n'était pas correct. Qu'ils devraient soit classer les transactions à un niveau mensuel, leur permettant alors d'avoir les paiements, les recouvrements et le solde de réserve mensuel (c'est-à-dire un fait semi-additif) parce que tout serait à un grain mensuel. Ou ils doivent trouver un moyen de décomposer le solde des réserves en transactions pour préserver le grain au niveau des transactions. Ou ils doivent diviser le fait en deux faits. L'un peut être le niveau mensuel du solde de la réserve. L'autre peut être au niveau de la transaction pour les paiements et les recouvrements. (Il n'y a aucune raison pour laquelle ils ne pouvaient pas non plus placer les paiements et les recouvrements à un niveau mensuel dans le fait du niveau mensuel. Cela dépend simplement des besoins de l'entreprise.)
Compte tenu de ce que j'ai appris, je noterai la réponse de Thomas comme la bonne. Cependant, je pense que la discussion que j'ai commencée avec la question d'origine est toujours une bonne chose pour les autres, donc je vais laisser la partie originale de ma question intacte. J'ai également l'intention d'attribuer une prime à la réponse de nikadam, car cela m'a beaucoup appris sur les faits additifs, non additifs et semi-additifs, et corrigé de nombreux malentendus que j'avais sur la modélisation dimensionnelle.