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

Modélisation Discussion :

[MCD][Looping] Création d'un historique


Sujet :

Modélisation

  1. #1
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut [MCD][Looping] Création d'un historique
    Bonjour à tous,

    Je commence à réfléchir sur un projet qui m'occupera certainement pendant quelques années.

    Voulant me lancer sur des bases solides, j'en reviens aux fondamentaux avec un MCD. Mais je dois me débarrasser du réflexe "j'attaque direct la BDD", et il me manque des billes

    Les règles et le MCD obtenu :

    Nom : MCD-1.png
Affichages : 113
Taille : 26,3 Ko

    Le MLD généré par Looping est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    agent = (agent_id INT AUTO_INCREMENT, last_name VARCHAR(20), first_name VARCHAR(20), email VARCHAR(40), password VARBINARY(50));
    workgroup = (workgroup_id INT AUTO_INCREMENT, name VARCHAR(20), description VARCHAR(1000));
    assignment = (#agent_id, #workgroup_id, created_at DATETIME);
    J'aimerais ajouter 2 choses :
    1. Une dimension temporelle en guise d'historique des affectations
    2. L'agent ayant effectué l'affectation (cela devra aussi apparaître dans l'historique)

    Comment faire apparaître cela sur le MCD ?

    Merci,
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  2. #2
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Bonsoir,

    Voici une solution qui répond au problème posé :
    Nom : Séb.jpg
Affichages : 95
Taille : 29,8 Ko

    L'association Affecter entraîne alors la génération de la table assignment suivante : (#agent_id, #workgroup_id, created_at DATETIME, #agent_id_Auteur)
    L'historique est ainsi géré ainsi que le nom de l'agent ayant effectué l'affectation.
    Une autre solution consiste à créer une classe d'entité "Affectation" : on peut alors se passer de la classe fictive Calendrier.

    Bonne continuation !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Génial merci

    Il faut que je vois la notion de CIF.

    Je me projette dans l'exploitation et le SQL (ce qui est sûrement une erreur à ce stade) => Afin d'éviter les recherches de MAX(horodatage) par agent/groupe, j'ai ajouté un attribut "Est dernier ?" qui sera calculé/màj à chaque affectation.
    Cela me semble du ressort de l'optimisation et inclue une certaine redondance dans le MCD.
    Peux-tu me confirmer que cet attribut "Est dernier ?" n'a rien à faire dans un MCD ?

    J'ai représenté la v2 avec une classe "Affectation", est-elle correcte ?

    Nom : MCD-2.png
Affichages : 84
Taille : 58,2 Ko

    Merci !
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    La v2 serait plutôt :

    Nom : MCD-3.png
Affichages : 79
Taille : 23,9 Ko

    J'ai déjà du mal à trouver des noms d'association, la v1 plus concise me plait davantage.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Quel est le but du booléen "est dernier", s'il s'agit de connaître la dernière affectation, il est redondant avec la date d'affectation.

    Confirmez-vous qu'un même agent peut être affecté à plusieurs groupes de travail simultanément ?
    Il manque certainement l'attribut date de fin d'affectation ou une durée à appliquer à partir de la date de début.

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Quel est le but du booléen "est dernier", s'il s'agit de connaître la dernière affectation, il est redondant avec la date d'affectation.
    Le but était d'identifier la dernière affectation d'un agent pour un groupe donné sans avoir besoin de faire un groupement et un MAX()[*] mais si j'intègre une date de fin d'affectation et que je la valorise à 9999-12-31 cela devrait suffire.

    Confirmez-vous qu'un même agent peut être affecté à plusieurs groupes de travail simultanément ?
    Oui.

    Il manque certainement l'attribut date de fin d'affectation ou une durée à appliquer à partir de la date de début.
    Oui, existe-t-il des stratégies ou modèles bien connus à ce propos ?

    Nom : MCD-4.png
Affichages : 64
Taille : 21,4 Ko

    MLD obtenu :

    agent = (agent_id, last_name, first_name, email, password);
    workgroup = (workgroup_id, name);
    workgroup_user_history = (#agent_id_Concerné, #workgroup_id, start_at, finish_at, created_at, #agent_id_Créateur);

    La PK de Affecter / workgroup_user_history n'empêche pas le chevauchement de périodes.
    Quelque chose est-il prévu au niveau MCD pour éviter cela ?

    agent_id    workgropup_id    start_at      finish_at
    1           1                2023-08-04    9999-12-31
    1           1                2023-08-07    2023-08-13    -- Ligne inutile
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    La date de fin d'affectation doit être un attribut porté par l'association, ainsi il ne participera plus à la PK de la table associative.
    On ajoutera une contrainte CHECK pour vérifier que la date de fin est supérieure à la date de début.

    À ma connaissance, seul PG a implémenté la notion de contrôle de chevauchement (OVERLAPS), du coup, il faut contrôler le chevauchement de périodes avec la méthode classique. Soit deux périodes P1 et P2 : il y a chevauchement si début P2 <= fin P1 et fin P2 >= début P1.
    Il est recommandé d'attribuer une valeur par défaut '9999-12-31' à la date de fin pour en faciliter les contrôles (plutôt que de jongler avec les marqueurs "NULL")

Discussions similaires

  1. Création d'un historique de navigation
    Par razzmatazz dans le forum jQuery
    Réponses: 7
    Dernier message: 12/02/2014, 22h13
  2. Réponses: 9
    Dernier message: 25/10/2013, 17h02
  3. Création d'un historique
    Par cel1205 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2010, 15h36
  4. mcd et création bdd
    Par yakup.67 dans le forum PowerAMC
    Réponses: 5
    Dernier message: 15/03/2010, 10h40
  5. création d'un historique
    Par choubak dans le forum Access
    Réponses: 2
    Dernier message: 14/05/2007, 09h34

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