Actuellement, je veux structurer une table de suivi/histoire comme celle-ci:
Donc, fondamentalement, je souhaite avoir une table qui suivra une autre historique des tables, stocker le nom de la colonne du champ modifié avec la nouvelle et la nouvelle valeur. Ma question est que quelqu'un peut-il piquer des trous dans cela? En outre, quel est le moyen le plus simple de s'assurer que seul un nom de colonne des tables Son suivi est entré dans la colonne Nom de terrain? Actuellement, mes options sont d'avoir une énumération dans le service que je bâtiment ou de créer une autre table d'état et de créer un nom de terrain un FK. Des idées meilleures?
EDIT Objectif: Il n'y a actuellement que 2 champs que nous nous soucions de suivre. Un champ d'un site Web sera affiché sur une page Web pour afficher l'historique, l'autre champ ne sera accédé que par un département et ils ont accès à une vue de la base de données qu'ils pourraient interroger. Ils interrogeraient simplement ce champ pour obtenir des informations sur qui a changé le champ et quoi. C'est la raison pour laquelle nous voulions la définir où un champ de base de données définit la colonne Table plutôt que d'avoir une copie exacte de l'historique des enregistrements de table. Nous voulons seulement deux champs suivis avec les possibilités d'ajouter ou d'éliminer des champs à l'avenir.
Merci!
Poker Trous: Que se passe-t-il si le schéma de base de données est modifié au même moment, et une modification de nom de colonne, ou la colonne est complètement supprimée? Beaucoup de systèmes de base de données permettent cela. Que va-t-il arriver à votre "nom de terrain" alors?
Pour l'intégrité des données: vous devez vous assurer que chaque opération de mise à jour ou de suppression sera assurée à la mise à jour de votre table de suivi. C'est mieux accompli par des déclencheurs appelant une procédure stockée. Vous devez vous assurer que seule la procédure stockée a accès à votre table de suivi, de sorte que personne d'autre puisse écrire de mauvaises valeurs.
Si vous pouvez vivre avec une solution spécifique au fournisseur de DB: la plupart des systèmes de DB ont des tables système où les informations de schéma (noms de table, identifiants de table, noms de colonne, etc.) sont stockés. Vous pouvez vérifier s'il est possible de définir une référence de clé étrangère à une telle table système. Cela permettrait de remplacer le nom du champ par un ID de champ si la base de données prend en charge quelque chose comme ceci.
En réalité, si vous avez besoin de suivre des lignes entières de la table spécifique, y compris toutes les colonnes (et pas seulement un petit sous-ensemble des colonnes), vous devez envisager la suggestion de Sarfeast. Lire Cet article sur les inconvénients des modèles de paires nom-valeurs de nom.
La mise en œuvre de l'audit de changement le plus réussi (suivi de l'historique) que j'ai vu est moins générique et beaucoup plus simple. Il implique de créer une table de journaux de changement pour chaque table que vous souhaitez surveiller, de conserver des noms de colonne identiques et des types de données (avec une colonne supplémentaire pour l'horodatage).
L'objectif final, c'est-à-dire ce que vous aimeriez faire avec les données vérifiées aidera à évaluer la manière dont chaque approche peut être appropriée.
En bref: Vous devez définir Trail d'audit Mécanisme pour les tables que vous souhaitez suivre la valeur de la valeur.
Tableau de piste d'audit unique:
Créez une table pour enregistrer le nom de la table, le nom du champ ABD Old et les nouvelles versions des données. Pour cette méthode, il est habituel de connecter des versions anciennes et nouvelles des données et uniquement les champs qui ont changé. Pour mettre en œuvre cela dans les déclenchements, il est nécessaire que l'une quelconque est une clé primaire sur la table ou que seule des lignes simples sont mises à jour.
Voici un bon post avec des scripts sur la manière de l'atteindre - création de sentiers d'audit
Autre Références utiles pour regarder:
Vous voudrez peut-être consulter NHibernate Envers Documentation de projet pour des idées.
Fondamentalement, vous avez une table de révision où vous pouvez ajouter des données supplémentaires comme un horodatage ou un utilisateur. Ensuite, chaque table que vous suivez reçoit une table d'audit supplémentaire avec toutes les colonnes dupliquées, une table FK à la table de révision et le type de révision (ajouter, modifier, supprimer). AFAIK, vous ne voudriez pas que vos tables d'audit aient une FK réelle à la table réelle car cela empêcherait les suppressions.