Chaque fois que j'ai besoin de desing une nouvelle base de données je passe très peu de temps la réflexion sur comment je dois configurer le schéma de base de données pour garder un journal d'audit de les modifications.
Certaines questions ont déjà été posées ici sur ce sujet, mais je ne suis pas d'accord que il y a une meilleure approche unique pour tous les scénarios:
- Conception De Base De Données Pour Les Révisions
- Meilleur design pour un changelog audit de la table de base de données
- Des idées sur la conception de base de données pour la capture des pistes de vérification
J'ai aussi tombé sur cet article intéressant sur le Maintien d'un Journal des Modifications de Base de données qui tente de liste les pro et les inconvénients de chaque approche. C'est très bien écrit et a des informations intéressantes, mais il a fait de mes décisions encore plus difficile.
Ma question est: Est-il que je peux utiliser, peut-être un livre ou quelque chose comme un arbre de décision que je peux utiliser pour décider de quelle façon dois-je faire, basé sur certains les variables d'entrée, comme:
- La maturité du schéma de base de données
- Comment les journaux seront interrogés
- La probabilité qu'il sera nécessaire de recréer les dossiers
- Ce qui est plus important: écrire ou de lire des performances
- La Nature des valeurs qui sont enregistrées (chaîne de caractères, des nombres, des gouttes)
- L'espace de stockage disponible
Les approches que je connais sont:
1. Ajouter des colonnes de création et de modification de la date et de l'utilisateur
Exemple de Table:
- id
- valeur_1
- value_2
- value_3
- created_date
- modifed_date
- created_by
- modified_by
Principaux inconvénients: Nous perdons l'historique des modifications. Ne peut pas rollback après validation.
2. Insérez uniquement des tables
- id
- valeur_1
- value_2
- value_3
- à partir de
- pour
- supprimé (boolean)
- l'utilisateur
Principaux inconvénients: Comment garder les clés étrangères jusqu'à ce jour? Immense espace nécessaire
3. Créer un tableau de l'historique de chaque tableau
Histoire de la table exemple:
- id
- valeur_1
- value_2
- value_3
- value_4
- l'utilisateur
- supprimé (boolean)
- timestamp
Principaux inconvénients: Nécessite de dupliquer tout vérifié tables. Si les modifications du schéma, il sera nécessaire à la migration de tous les journaux.
4. Créer un Consolidés Tableau de l'historique de Toutes les Tables
Histoire de la table exemple:
- table_name
- champ
- l'utilisateur
- nouvelle_valeur
- supprimé (boolean)
- timestamp
Principaux inconvénients: Vais-je être en mesure de recréer les dossiers (rollback), si besoin est facilement? Le nouvelle_valeur colonne doit être une énorme chaîne de caractères, donc il peut prendre en charge tous les différents types de colonne.