2010-06-18 5 views
0

J'ai une base de données MySQL où je stocke des informations qui sont entrées à partir d'une page web PHP. J'ai une page qui permet à l'utilisateur d'afficher une ligne existante et de faire des changements et de les enregistrer dans la base de données. Je veux connaître la meilleure façon de conserver les entrées d'origine, ainsi que la nouvelle mise à jour et les mises à jour ultérieures.Comment archiver les modifications apportées aux lignes du tableau?

Ma pensée est de faire une nouvelle table avec les mêmes colonnes que la première, avec un champ d'horodatage supplémentaire. Lorsqu'un utilisateur soumet une mise à jour, le script prend le contenu de la ligne de la table principale et les saisit dans la table d'archivage avec un horodatage, puis saisit les nouvelles valeurs dans la table principale. J'ajouterais également un nouveau champ à la table principale pour spécifier si la ligne a été éditée ou non. De cette façon, je peux faire une requête de la table principale et obtenir les données les plus récentes, et je peux également interroger la table d'archives pour voir l'historique des changements. Est-ce la meilleure façon d'y parvenir ou existe-t-il un meilleur moyen?

Répondre

0

Vous pouvez utiliser des déclencheurs à la mise à jour, à la suppression ou à l'insertion pour garder une trace de tous les changements, qui les a créés et à quel moment.

+0

J'aime cette idée. J'ai fait un peu de test, et j'ai une question. Actuellement, ma table contient les données ajoutées par le réviseur, ainsi qu'un champ status et userid. Lorsque l'utilisateur ouvre l'élément pour la première fois, il définit l'état sur "en cours" ainsi que son ID. Comme ce sont des instructions UPDATE, elles provoqueront le déclenchement. Je ne veux pas capturer ces changements, mais plutôt lorsque l'utilisateur clique sur "Soumettre" et qu'il entre les données, ou fait une modification plus tard. Quelqu'un at-il un exemple de comment déclencher quand seulement certains champs sont mis à jour? – zoidberg

0

Consulter les tables d'audit de la base de données. Il y a plusieurs méthodes, j'aime la colonne active qui est mise à 0 quand vous 'supprimez' ou 'mettez à jour' et le nouvel enregistrement est inséré. Il fait mal à la tête pour la vérification des clés unique. L'alternative que j'ai utilisée est celle que vous avez mentionnée, une table séparée. Comme le mentionne Buckbova, vous pouvez utiliser un déclencheur pour effectuer l'insertion secondaire sur 'delete' ou 'update'. Sinon, gérez-le dans votre code PHP si vous n'avez pas cette capacité.

0

Vous n'avez pas besoin d'une deuxième table. Juste avoir une date de début et de fin sur chaque ligne. La ligne sans date de fin est l'enregistrement actif. J'ai construit des systèmes entiers en utilisant cette méthode, et aussi longtemps que vous indexez les champs de date, c'est très rapide. Lors de la récupération de l'enregistrement en cours, AND end_date IS NULL est ajouté à la clause WHERE.

0

Dans cette situation, je vous recommande de considérer toutes les propriétés d'une table après l'avoir ajouté quelques colonnes:

  1. actif/actif
  2. ID de la personne qui a gardé ces paramètres
  3. horodatage d'ajouter
Questions connexes