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 :

Modélisation d'historique [MCD]


Sujet :

Schéma

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut Modélisation d'historique
    Bonjour à tous,

    j'ai un gros soucis dans la conception de mon MCD.
    • Voila j'ai besoin de découper mon organisation en petits sous-ensemble que nous pourrions appeler équipes. Il y a une centaine d'équipes. Les équipes sont constitués d'un code logique et d'un nom.
    • À chaque équipe on associe une section (il y a une dizaine de sections). Il n'y a pas plus de 2 niveaux dans le modèle. A chaque section on a au moins une équipe et pour un équipe on a une et une seule section.
    • Bon maintenant, les équipes vont évoluer, passer d'une section à une autre, être supprimé, être créé, être dédoublé, ... et cela très régulièrement (au moins une fois par an).
    • J'ai besoin de savoir chaque année quelle équipe est nouvelle, quelle équipe disparait, quelle équipe à changer de place, ... J'ai également besoin de savoir si deux équipes sont mixé, quel est la nouvelle équipe et vice versa.
    • J'ai aussi besoin de la liste des équipes en 2009 et faire "mapper" cette liste avec celle de l'année d'avant pour que je puisse voir l'évolution de l'organisation.
    • Enfin les équipes ont toutes un code (A, B, C, ...) et un certain ordre à respecter en fonction dudit code. Si l'équipe C devient A l'année d'après j'ai besoin de voir :



    2009 __________________________2008
    A : équipe machin______________A :équipe truc
    B : équipe bidule_______________B : équipe bidule
    C : équipe chouette____________C : équipe machin
    D : équipe truc________________D : équipe chouette

    là c'est un cas simple encore, mais quand les équipes sont dédoublés, qu'il y en a de nouvelles ....


    Comment puis-je modéliser tous ça, et bien sûr garder l'historique de tous les changement

    un grand merci

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Le principe général et fondamental est de dissocier le présent du passé.

    Considérons le cas du code (A, B, C, ...) indépendamment de la contrainte de l’ordre à respecter (qui a priori se résout par un trigger au niveau logique, mais ne mélangeons pas).

    Soit EQUIPE le nom de l’entité-type utilisée pour décrire une équipe. Dotons-la d’un identifiant composé d’un attribut prenant des valeurs non significatives (par exemple un entier auto-incrémenté au niveau logique), qu’elle conserve sa vie durant.

    Cette entité-type sera dotée d’un attribut correspondant au code (appelons-le par exemple CODE). Il sera doublé d’un attribut permettant de savoir à quelle date le code a été affecté à l’équipe. Appelons-le CODE_DATE_DEBUT. Dans la mesure où l’on ne connaît pas la date à laquelle ce code sera obsolète, en toute logique on ne prévoit pas d’attribut CODE_DATE_FIN. En revanche, pour ce qui concerne le passé, on met en oeuvre une entité-type EQUIPE_CODE_HISTO permettant de connaître les anciens codes utilisés pour l’équipe dont les attributs sont CODE (sous-entendu ancien), CODE_DATE_DEBUT et CODE_DATE_FIN.

    Supposons maintenant que l’équipe puisse changer de section, en totale indépendance des changements de codes. L’entité-type EQUIPE sera dotée d’un attribut SECTION_DATE_DEBUT, représentant la section à laquelle est actuellement rattachée l’équipe. Concernant le passé, là encore on mettra en œuvre une entité-type dédiée, par exemple EQUIPE_SECTION_HISTO, dont les attributs sont SECTION_ID (au niveau tabulaire s'entend), SECTION_DATE_DEBUT et SECTION_DATE_FIN.

    Etc.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut
    Je suis arrivé à mes fins,

    merci beaucoup
    je ne suis pas sûr d'avoir suivi exactement toutes tes recommandations mais tes pistes m'ont énormément avancé.

    L'idée est d'avoir une table A avec un id neutre et un nom
    et une autre table B avec un autre id neutre + id de la table A + propriétés diverses + date début + date fin.

    Bon tout marche pas mal, j'ai fait des tests c'est robuste.

    Maintenant un petit rigolo est arrivé et m'a dit "c'est quoi l'intérêt d'avoir des dates de fin ? (qui par défaut sont égales à 9999/12/31 pour faire simple). ?

    bonne question, pourquoi ne pas juste mettre une date de mise à jour.
    Je demande alors a mon système donne mois un aperçu de toutes les équipes à tel date.

    Je prend paramètre doit être strictement supérieur à date de mis à jour (correspond à la date de début finalement).

    Le problème : si je fais ca et que la requête me sors plusieurs enregistrement (il aurait pu y avoir plusieurs changement et donc plusieurs lignes avec des date de mise à jour inférieur au paramètre).

    Est il possible dans la risquête de dire
    1) classe tout par ordre chronologique
    2) ne conserve que les dates < au paramètre entré (qui est une date...)
    3) si tu trouves plusieurs lignes tu ne prends que la dernière, c'est elle qui est valide.

    Avantage : si j'enlève les date début et fin, c'est beaucoup plus léger pour l'utilisateur qui n'a plus qu'à rentrer la date de mis à jour dès qu'il change qq chose dans les tables. Limite on peut mettre la date d'aujourd'hui comme valeur par défaut.

    Sinon l'utilisateur doit :
    aller dans le dernier enregistrement changer la date de fin qui par défaut est 9999/12/31 et la changer par la date de la veille.
    créer un nouvel enregistrement avec la date d'aujourd'hui comme date de début et 9999/12/31 comme date de fin.

    Je préfère avoir une seule date...

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Comment modéliser un historique?
    Par Atchioum dans le forum Schéma
    Réponses: 10
    Dernier message: 15/03/2012, 19h08
  2. Réponses: 16
    Dernier message: 09/10/2007, 11h43
  3. Réponses: 4
    Dernier message: 30/08/2007, 15h09
  4. [Modélisation] Gestion des dimensions historiques
    Par marchand_de_sable dans le forum Conception/Modélisation
    Réponses: 7
    Dernier message: 27/08/2007, 12h17
  5. [MCD] comment modéliser le fait qu'on veut garder un historique?
    Par zamoto dans le forum Schéma
    Réponses: 19
    Dernier message: 16/08/2006, 10h46

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