9

Pendant longtemps, nous avons voulu créer un système de gestion de cas où aucun historique n'est jamais perdu. Quand un changement est fait, nous voulons enregistrer ce changement, mais avoir la possibilité de revenir à n'importe quel moment et de voir à quoi ressemblait l'enregistrement. Je voulais poser cette question à la communauté Stack Overflow pour voir quelles sont les façons de le faire, y a-t-il déjà une technologie en place pour y parvenir?Méthodes de gestion de l'historique des données dans la base de données SQL Server 2008

Répondre

3

Je ne suis pas sûr comment une base de données temporelle comme marc_s mentionné les travaux, mais si vous utilisez SQL Server 2008 ou version ultérieure, vous pouvez profiter de son intégré Change Data Capture (CDC) fonctionnalité:

Activation CDC utilise le journal des transactions de réplication pour stocker les insertions, les mises à jour et supprime un table et crée des fonctions de table qui vous permettent d'extraire les lignes à une date/heure donnée, ou de récupérer uniquement les modifications. Vous ne pouvez pas compter uniquement sur CDC, car votre journal des transactions deviendra ingérable et lent. Alors ce que vous faites est:

  • activer CDC,
  • créer une table d'historique en utilisant le même schéma que la table d'origine, mais en ajoutant deux autres colonnes pour stocker des informations de version de ligne (comme une slowly-changing dimension dans un relationnel base de données OLAP) et
  • créer une tâche qui sera interroge périodiquement les fonctions CDC pour les changements depuis sa dernière charge et les pousse à la table d'historique

ensuite, vous pouvez ensuite utiliser la table d'historique dans vos requêtes, se joindre à comme vous le feriez normalement, mais avec un ou plusieurs prédicat (s) supplémentaire (s) pour obtenir l'enregistrement "en-de" n'importe quelle date.

+1

Cela ressemble à beaucoup de couches supplémentaires pour quelque chose qu'un déclencheur pourrait faire pour remplir cette même table d'histoire que vous avez mentionnée. – Chris

+0

Ceci est vrai; Cependant, en fonction du nombre de colonnes, cela peut nécessiter beaucoup de déclencheurs. D'une manière ou d'une autre, les scripts peuvent être programmés, la complexité ne devrait donc pas poser trop de problèmes. Les deux méthodes ont leurs avantages et leurs inconvénients, et quelle est la bonne façon dépend de vos besoins. Voici une bonne discussion: http: // sqlserverplanet.com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk

+0

J'utilise des tables séparées + Triggers pour gérer l'historique des enregistrements et deux autres tables pour enregistrer quand et qui a fait les changements dans quel enregistrement. +1 aux déclencheurs! – Achilles

Questions connexes