IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Existe-t-il un Analysis Pattern d'historisation de données


Sujet :

Schéma

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 165
    Par défaut Existe-t-il un Analysis Pattern d'historisation de données
    Bonjour à tous,

    J'ai étudié les quelques sujets qui traitent d'historisation sur ce forum et je n'arrive pas à trouver une réponse à ma problématique c'est pourquoi je me permets de vous l'exposer.

    Je travaille sur un projet plus moins conséquent qui exploitent de nombreuses entités. Les cas d'utilisations du systèmes sont nombreux, mais se rapproches à chaque fois de cas d'utilisation simples CRUD (Create, Research, Update, Delete).

    Par exemple un utilisateur va pouvoir ajouter/modifier/supprimer une "Mission" ou ajouter/modifier/supprimer un "Rapport de mission" ou il pourra ajouter/modifier/supprimer un "Matériel", etc.

    Bien sûr il y'a d'autres cas d'utilisation moins simples, mais ce n'est pas le problème.

    Ma problématique générale serait d'historiser les opérations sur ces entités.

    Mes contraintes seraient :
    1/ Concevoir une solution qui ne prend pas trop d'espace disque sur la base de données
    2/ Un besoin "fonctionnel" de conserver les données de l'instant T de l'historisation.
    3/ (Si possible) De trouver une solution générique pour toutes les entités concernées.
    4/ Toutes celles que je n'ai pas encore identifiées et qui pourtant existent.

    Les solutions envisagées :
    A ce jour, avec mon faible niveau en conception de modèle de données. Je pense aux solutions suivantes :

    Solution Générique 1 - Historisation par Id

    Gérer une table "historique" dans laquelle on pourrait inscrire l'id de l'entité historisé, un login et une date.

    Cette solution très simple, présente déjà des inconvénients non négligeables. En effet cette solution ne permet pas de conserver les données de l'instant T de l'historisation, par contre elle permet de garantir une historisation "Light" en espace disque.


    Solution Générique 2 - Historisation par copie de données
    Dans ce cas on gère une table "historique", dans laquelle on va copier les données au moment de l'historisation.
    Par exemple lors de l'ajout d'une mission, on va copier dans la table historique, le titre de la mission, la description de la mission, la durée de la mission, le login, nom, prénom, information sur l'utilisateur qui effectue l'ajout et la date.
    En cas de modification de la mission, on fait pareil, on copie toutes les données.

    L'avantage d'un tel système est on assure la conservation de l'information à l'instant T de l'historisation: Le désavantage est que ça peut prendre vite énormément de place en base.
    Inconvéniant, comment faire une seule table historique pour gérer toutes les entités (Sachant que les attributs ne sont pas les mêmes)

    Voilà pour les grandes idées ultra simples de mon esprit simpliste ! Pour résumer mes 2 cas, dans un cas j'historise un état "Mission - Modifiée - Le xx/xx/xxxx - Par Y" et dans l'autre cas j'historise carrément les données pour des raisons purement fonctionnelles.

    Voilà ma question est donc de savoir s'il existe un modèle (pattern) plus intelligent que mes idées (J'en doute pas) concernant cette problématique qui a du être rencontrée des milliers de fois ?! (Que fait le Gang of four ?)

    Quelles sont les bonnes questions à se poser dans ces cas là, pour construire le modèle de données le plus solide possible.

    A vous les studios ...

  2. #2
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Complexe ton affaire. Et dépend finalement de ton besoin réel.

    Si ton besoin est de consigner dans un journal (un historique), les différentes modifications apportées (un change log en gros) alors ta solution 1 est bonne, à condition qu'elle recèle suffisamment de détail pour être exploitable.

    Si ton besoin est de pouvoir revenir à une ancienne version, ou d'avoir une vue de consultation d'un ancien état alors il faut une autre stratégie. Là c'est la solution 2, éventuellement gérée au travers du pattern Memento. Il est possible de tout stocker au sein d'une unique table en sérialisant les attributs des objets dans un unique attribut. Il est également possible, en rusant un peu, de gagner en place en générant une sérialisation textuelle, d'en faire un diff, et de stocker ce diff (éventuellement compressé) dans l'attribut. Mais alors pour revenir à une version n-2, il faut 2 étapes de reconstruction d'objet.

Discussions similaires

  1. Datawarehouse - Historisation des données
    Par ginkas31 dans le forum Modélisation
    Réponses: 9
    Dernier message: 09/05/2014, 16h18
  2. Design Pattern d'historisation (trace/log)?
    Par MLK jr dans le forum Design Patterns
    Réponses: 4
    Dernier message: 10/10/2008, 22h43
  3. Historisation des Données
    Par mathieu44800 dans le forum Autres
    Réponses: 10
    Dernier message: 19/02/2008, 12h51
  4. Réponses: 8
    Dernier message: 18/02/2008, 13h10
  5. [MySQL] Contrôler la date et l'existence d'un e-mail dans ma base de données
    Par saadelph dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/10/2007, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo