L'ajout d'une version de l'histoire du système de table de base de données

Je suis en train de travailler sur un projet où je dois ajouter un formulaire de contrôle de version de données ou de la fonction de l'historique de chaque tableau. Pour résumer, nous devons garder une trace de chaque insertion ou modification dans la base de données, de sorte qu'il est facile de revenir en arrière ou afficher les versions précédentes des données de chaque table.

La façon dont mon chef de projet envisage ce qui est à faire est d'ajouter quelques nouvelles colonnes de chaque tableau. La principale caractéristique est une coloumn nommé "version". Chaque fois qu'une mise à jour est faite, rien n'est vraiment mis à jour, l'ancienne ligne de en reste qu'une nouvelle ligne est ajoutée à la table avec une valeur incrémentée pour "version".

Pour afficher les données actuelles, on utilise simplement une vue qui affiche uniquement les lignes avec le plus haut numéro de version de chaque type.

Alors que cela fonctionne très bien aussi loin que mouvements de va-et-vient entre les différentes versions, j'ai rencontré un problème avec cette approche. Pour toute relation entre les tables, nous avons besoin de définir les clés étrangères et les clés étrangères ne pouvez référencer des champs uniques dans l'autre table. Maintenant que nous sommes de garder plusieurs versions d'une même ligne (avec le même 'Id' comme c'est fondamentalement le même morceau de données de notre application est concerné), on ne peut plus utiliser d'une autre table 'Id' comme une clé étrangère d'une table.

Nous sommes à l'aide d'un champ clé primaire unique pour chaque ligne, mais ce qui est inutile comme un identificateur depuis plusieurs rangées sont fondamentalement différentes versions de la même chose. Nous avons pu assurer le suivi manuel de la version la plus récente de chaque type d'entrée et de mise à jour correspondante des relations de clé étrangère à chaque fois que quelque chose est changé, mais qui ressemble à beaucoup de travail et je ne suis pas sûr que ce sera toujours le même (par exemple, de revenir à la version précédente d'une entrée peut provoquer la clé étrangère pour faire référence à un vieux et inutilisable version d'une autre entrée dans certains autres de la table.)

Je sais qu'il y a d'autres façons de conserver un historique des mises à jour de la base de données (par exemple en utilisant un tableau de l'historique de chaque tableau), mais je suis coincé avec cette approche dans ce projet.
Est-il plus évident de la façon de gérer les relations entre les tables comme ça que je suis absent?

Note: je suis à l'aide de MS SQL Server 2008 R2.

InformationsquelleAutor MAK | 2011-02-11