Tableaux instantanés avec des foreign keys par rapport aux tables instantanées avec des valeurs réelles

Dans l'une des bases de données de nos clients, il existe quelques arrays instantanés qui résument des informations utiles provenant de nombreuses autres tables (par exemple, quel était l'état de chaque client dans chaque période, etc.).

Cependant, les tables d'instantanés contiennent principalement des foreign keys à leurs tables d'origine. Par conséquent, afin d'get des informations utiles sur l'instantané, nous devons les joindre plusieurs fois à leurs tables correspondantes. Et ces jointures prennent souvent beaucoup de time. Ajout d'index à toutes les colonnes FL dans les bases de données (ou au less sur les colonnes dans les clauses WHERE dans nos requêtes), d'autre part, ralentit considérablement la database.

Donc ma question est, ne serait-il pas mieux d'avoir des arrays instantanés avec des valeurs réelles au lieu de foreign keys? Et si la réponse est négative, ne viendrait-elle pas à l'encontre des arrays instantanés si les tables d'origine sont mises à jour (par exemple si un 'Candle' et maintenant 'Lamp' sont bien sûr un snapshot rest cohérent mais est-il vraiment instantané? Cas?)

Je pencherais vers le stockage des données réelles plutôt que des valeurs FK pour la raison que vous avez mentionnée. Cela dit, une meilleure solution pourrait être de déplacer ces données historiques avec des attributes pertinents (IE Dimensions) et de le restructurer pour l'parsing. L'entreposage de données est certainement une solution pour cela, bien que ces projets puissent être de très grande envergure, vous devez donc en comprendre la valeur et la scope de manière appropriée. Cependant, même un schéma en écanvas léger ciblant les events spécifiques qu'ils tentent de capturer pourrait être une meilleure solution qu'une grande table historique avec des relations avec des tables basées sur des transactions (en particulier si la logique de requête est complexe) .