Comment puis-je ajouter une colonne à une table de fait « après » est déjà déployée et peuplée?

StackOverflow https://stackoverflow.com/questions/1874714

Question

J'ai données SQL Server 2005-mart étoiles schéma avec le fait d'habitude et les tables de dimensions. Ceci est déployé et étant peuplé via un package ETL basé SSIS. Tout bien jusqu'à présent.

Je viens d'être approché par le client avec une nouvelle exigence. Jamais, je vous entends dire! Cette exigence signifie que je dois ajouter une nouvelle table de dimension aux données-mart pour mesurer un nouvel aspect des faits entrants qui se trouvent être financières.

Pour être en mesure de « tranche » les faits par cette nouvelle dimension que je dois ajouter une nouvelle colonne de clé étrangère dans la table de fait un lien vers la nouvelle dimension.

Je suis pas clair sur la meilleure façon de le faire. Que dois-je faire avec les données qui ont déjà été capturés? Il suffit de faire la nouvelle nullité des colonnes et accepter ce vieux fait aura un NULL? En fait, comme je tape, son né sur moi que je pourrais mettre à jour des faits aussi bien. Ou peut-être que je devrais créer une table de fait séparé (enfant?) Qui contiennent seulement un lien vers chaque fait nouveau (parent) et un lien vers la nouvelle dimension.

Je n'ai pas été en mesure de trouver des informations sur les meilleures pratiques pour ce type de changement.

Toute aide serait très apprécié.

Par ailleurs. Aucun service d'analyse utilisée encore.

Merci, Martin

Était-ce utile?

La solution

  1. Ajoutez la nouvelle table de dimension.

  2. vous le remplissiez.

  3. Ajoutez la référence annulable sur vos faits existants.

    ne sont pas tous les faits peuvent être joignables à la nouvelle dimension. Ceci est courant quand vous avez de nouvelles informations. Si vous avez tous vos fichiers d'origine, vous pouvez avoir toutes les informations nécessaires pour mettre à jour tous les faits.

    Si tous les faits ne peuvent pas être mis en correspondance avec la nouvelle dimension, ajoutez une ligne « N / A » à la dimension. Parfois, il y a une bonne raison d'avoir plusieurs lignes N / A en fonction de ce que vous savez sur vos faits.

  4. Mettre à jour vos faits afin qu'ils font référence à toute la nouvelle dimension -. Soit la valeur de dimension appropriée ou la N spéciale / Une ligne

Idéalement, vous allez modifier votre table de fait pour rendre la colonne non annulable. Parfois, cela prend un temps douloureusement long, et il est plus facile d'exporter les données, redéfinir la table, et recharger les données.

Autres conseils

Eh bien S.Lot répondu à la plupart de celui-ci, je voudrais simplement ajouter que ce qu'il faut faire avec les faits anciens est une décision d'affaires. Assurez-vous de leur demander et l'obtenir par écrit.

S. Lott a une excellente réponse, si vous combinez cela avec votre suggestion d'une table de fait « enfant », vous pourriez avoir une autre table de fait comme une « table de pont » avec la nouvelle dimension et tous les autres mêmes dimensions, mais pensez à ce sujet - si vous allez à ce problème, vous pouvez simplement faire une nouvelle conception de la table de fait identique à l'ancienne, mais avec un non annulable nouvelle dimension (la seule charge sur votre table de bridge serait l'espace des faits de toute façon). Peupler l'histoire de façon appropriée dans la nouvelle table - reliant soit à une dimension valide ou la N / Une dimension de l'histoire comme le suggère S. Lott. Ensuite, commencer à entrer de nouvelles données. Vous ne devez jamais revenir en arrière et changer le annulable à la non-annulable. Ensuite, vous pouvez juste désapprouver la vieille table de fait -. Ou échanger vos vues sur la couche de présentation (si vous avez ceux-ci, cela vous donne une liberté de MOFR beaucoup en dessous avec vos faits et dimensions)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top