Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1441 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Schéma d'un historique des modifications

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Schéma d'un historique des modifications

n°2093317
SV_LVH
Posté le 04-08-2011 à 15:08:21  profilanswer
 

Bonjour à tous,
 
Pour la première fois je tente d'inclure un système d'historique sur ma DB pour avoir une trace des updates effectués sur la base de données par les utilisateurs.
 
Dans cet exemple l'utilisateur peut modifier les valeurs des tables suivantes. :
'ficheRef', 'adresse', 'contact', 'news', 'usager', 'missionRef', 'catRef'.
 
Elles sont toutes reliées à une table 'historique' avec une cardinalité 0,1 -- 0,N  (sauf la table 'usager' dont je veux impérativement récupérer la clé primaire pour chaque historique).  (voir le lien vers le schéma, ci-dessous)
 
http://i68.photobucket.com/albums/i7/Anatal/mcd_historique.gif?t=1312374308
 
Je compte donc utiliser cette table historique grâce à des triggers:
 
Sur chaque table, dès que le champ 'dateModif[I]matable[/I]' est modifié,
- insérer l'id de la table modifiée dans l'historique
- insérer l'id de la table 'usager' dans l'historique
- appliquer un CURRENT_TIMESTAMP dans le champ 'dateModification' de l'historique.
 
Est-ce que ce raisonnement vous parait cohérent? Voyez vous des modifications a apporter à cette façon de faire?
 
Cordialement.


---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
mood
Publicité
Posté le 04-08-2011 à 15:08:21  profilanswer
 

n°2093324
rufo
Pas me confondre avec Lycos!
Posté le 04-08-2011 à 15:23:38  profilanswer
 

Perso, la table de log que j'ai fait pour mon logiciel de help-desk Astres (cf ma signature) a la structure suivante :
 

Code :
  1. CREATE TABLE `LogEvents` (
  2.  `LogEventID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.  `LogEventDate` datetime NOT NULL,
  4.  `LogEventItemID` int(10) UNSIGNED NOT NULL,
  5.  `LogEventItemType` varchar(30) NOT NULL,
  6.  `LogEventService` varchar(30) NOT NULL,
  7.  `LogEventAction` varchar(30) NOT NULL,
  8.  `LogEventLevel` tinyint(3) UNSIGNED NOT NULL DEFAULT '5',
  9.  `LogEventTitle` varchar(255) DEFAULT NULL,
  10.  `LogEventDescription` mediumtext,
  11.  `LogEventLinkedObjectID` int(10) UNSIGNED DEFAULT NULL,
  12.  `SupportMemberID` smallint(5) UNSIGNED NOT NULL,
  13.  PRIMARY KEY  (`LogEventID`),
  14.  KEY `SupportMemberID` (`SupportMemberID`),
  15.  KEY `LogEventItemID` (`LogEventItemID`)
  16. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;


 
SupportMemberID est l'ID de l'utilisateur ayant fait la modif
LogEventItemID est l'ID de l'enregistrement créé/modifié/supprimé
LogEventItemType est le type d'enregistrement (en gros, la table concernée)
LogEventService est le nom du "module" concernée (un module ayant ses fonctions assurées par une ou plusieurs tables)
LogEventAction est le nom de l'action réalisée (ajout, modif, suppr...)
LogEventLevel est le niveau de l'action (certaines actions étant plus importantes que d'autres, ça sert à filtrer les logs important de ceux qui le sont moins)
LogEventTitle contient un petit message résumant l'action effectuée, très utile quand il s'agit d'une suppression (forcément, plus possible de faire une jointure sur un enregistrement qui n'existe plus :D )
LogEventDescription contient plus de détails sur l'action, souvent pas rempli, mais utile dans certains cas, par ex, pour stocker le corps d'un mail envoyé.
 
A noter que LogEventTitle et LogEventDescription me servent aussi pour la génération de flux RSS. Ma table fait une pierre 2 coups : un mécanisme de logs et permet de générer différents flux RSS (d'où les champs LogEventItemType, LogEventService et LogEventService qui me permettent de filtrer pour avoir des flux RSS spécifiques).
 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2093328
SV_LVH
Posté le 04-08-2011 à 15:34:38  profilanswer
 

@rufo : en effet belle table de log! De bonnes idées je vais surement essayer d'en transposer certaines.
 
Par contre on me dit que je dois directement lier la table 'usager' à toutes les tables que je veux relier à 'historique' pour avoir l'idUsager. Sinon , parait-il, je ne pourrais pas récupérer l'id de l'utilisateur.  
 
Ca vous parait crédible?


---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
n°2093336
rufo
Pas me confondre avec Lycos!
Posté le 04-08-2011 à 16:07:38  profilanswer
 

Ca dépend.
 
Perso, ma table de log est venues bien après la création du soft. Donc, pour la plupart des tables qui nécessitaient d'avoir l'ID de celui qui avait créé l'enregistrement, j'avais effectivement un lien entre ces tables et l'équivalent de votre table "usagers" (dans mon cas, SupportMembers).
 
maintenant, si 'es en début de conception, si t'as une table qui logue les créations/maj/suppr des enregistrements dans différentes tables, c'est pas la peine de lier ces tables à "usagers" puisque la table histo sera déjà liée à la table "usagers". Du coup, pour connaître le créateur d'un enregistrement ID=xxxx dans la table = yyyy, il suffit de regarder dans la table histo quel est l'ID usager associé à l'enregistrement xxx pour la table yyyy ;) D'où la nécessité de tracer dans la table de log le type d'action et la table concernée...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Schéma d'un historique des modifications

 

Sujets relatifs
Schéma Conceptuel - Planning PHPDate vide validée par schéma XSD
mod_dav - création d'un historiqueOpenLDAP et Active Directory : pb de schéma ?
Mysql : Faire une recherche dans tout le schemaQuelques petites modifications à appliquer sur ma feuille de style CSS
[Symfony 1.4] database.yml et generation du schema.yml : pgsqlModifications Options Défauts Windev
[Résolu] Choix d'un schéma d'une table 
Plus de sujets relatifs à : Schéma d'un historique des modifications


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR