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 :

Transformation en MLD [MCD]


Sujet :

Schéma

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Transformation en MLD
    Bonjour à tous,

    Je dois convertir un MCD en MLD, et j'ai un doute à une étape:

    http://image.noelshack.com/fichiers/...87-capture.png

    et lorsque je construit le MLD, je dois mettre dans ENQUÊTEUR :

    ENQUÊTEUR ( Id Enquêteur, Nom enq, Prénom Enq, Adresse Enq, CP Enq, Ville Enq, Tel Enq, Mail Enq, #Id équipe_compose, #Id Equipe_responsable)
    ou
    ENQUÊTEUR ( Id Enquêteur, Nom enq, Prénom Enq, Adresse Enq, CP Enq, Ville Enq, Tel Enq, Mail Enq, #Id équipe)

    Par avance, je vous en remercie......

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour conspiration,

    Une association binaire ayant pour cardinalités 1,1 d'un côté se traduit au niveau MLD par la création d'une clé étrangère dans la table issue de l'entité qui se situe du côté 1,1. Prenons par exemple l'association "composer" :

    [ ENQUETEUR ]--1,1----( composer )----0,n--[ EQUIPE ]

    Au niveau MLD, cette association se traduit par une clé étrangère dans la table ENQUETEUR. Cette clé étrangère référence la clé primaire "Id Equipe" de la table EQUIPE.
    Appliquée à l'association "Responsable", cette règle donne lieu à la création d'une clé étrangère dans la table EQUIPE qui référence la clé primaire de la table ENQUETEUR.

    Les tables du MLD sont donc :

    ENQUETEUR(Id Enqueteur, ..., #Id Equipe) où #Id Equipe référence l'équipe dont il fait partie
    EQUIPE(Id Equipe, ..., #Id Enqueteur) où #Id Enqueteur référence l'enquêteur responsable de l'équipe

    Pour aller plus loin, il faut se poser une question :
    L'enquêteur responsable de l'équipe doit-il ou ne doit-il pas faire partie de la liste des enquêteurs qui composent l'équipe ?
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  3. #3
    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 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Pour aller un peu plus loin
    Bonsoir,


    Citation Envoyé par JPhi33
    Les tables du MLD sont donc :

    ENQUETEUR(Id Enqueteur, ..., #Id Equipe)
    EQUIPE(Id Equipe, ..., #Id Enqueteur)
    D’accord, mais...

    Modélisons la chose, par exemple avec DB-MAIN (gratuit), en procédant par rétroconception.

    On part d’un script SQL conforme :

    
    CREATE TABLE EQUIPE 
    (
            Id_Equipe                 INT            NOT NULL
          , Id_Enqueteur              INT            NOT NULL
          , Nom_Equipe                VARCHAR(32)    NOT NULL     
        , CONSTRAINT EQUIPE_PK PRIMARY KEY (Id_Equipe)       
        , CONSTRAINT EQUIPE_AK UNIQUE (Id_Enqueteur)       
    ) ;
    
    CREATE TABLE ENQUETEUR 
    (
            Id_Enqueteur              INT            NOT NULL
          , Nom_Enqueteur             VARCHAR(32)    NOT NULL     
          , Id_Equipe                 INT            NOT NULL      
        , CONSTRAINT ENQUETEUR_PK PRIMARY KEY (Id_Enqueteur)
    ) ;
    
    ALTER TABLE EQUIPE ADD CONSTRAINT EQUIPE_ENQUETEUR_FK FOREIGN KEY (Id_Enqueteur)
              REFERENCES ENQUETEUR (Id_Enqueteur) ;
    
    ALTER TABLE ENQUETEUR ADD CONSTRAINT ENQUETEUR_EQUIPE_FK FOREIGN KEY (Id_Equipe) 
              REFERENCES EQUIPE (Id_Equipe) ;
    
    
    MLD obtenu par rétroconception :





    Ça sent à plein nez le deadlock, le verrou mortel, l’étreinte fatale...

    Mais bon, poursuivons la rétroconception. Sans surprise, le MCD obtenu est le suivant :





    MCD semblable à celui proposé par conspiration :






    Cela dit, le MLD illustre parfaitement le problème de l’œuf et de la poule :

    Si on veut insérer une ligne dans la table EQUIPE, on doit y fournir une valeur <a> pour l’attribut Id_Enqueteur, ce qui implique l’existence dans la table ENQUETEUR d’une ligne où l’attribut Id_Enqueteur contient la valeur <a> (intégrité référentielle oblige) : il faut donc d’abord insérer une ligne dans la table ENQUETEUR contenant cette valeur <a>, mais cette insertion n’est possible que si l’attribut Id_Equipe de cette table contient une valeur <b> déjà présente dans la table EQUIPE (attribut Id_Equipe)...

    Dans le contexte des SGBD SQL traditionnels, on est coincé.

    Pour s’en sortir, L’association RESPONSABLE du MCD précédent doit être transformée en entité-type :






    MLD dérivé :





    Script SQL :

    
    CREATE TABLE EQUIPE 
    (
            Id_Equipe                 INT            NOT NULL
          , Nom_Equipe                VARCHAR(32)    NOT NULL     
        , CONSTRAINT EQUIPE_PK PRIMARY KEY (Id_Equipe)       
    ) ;
    
    CREATE TABLE ENQUETEUR 
    (
            Id_Enqueteur              INT            NOT NULL
          , Nom_Enqueteur             VARCHAR(32)    NOT NULL 
          , Id_Equipe                 INT            NOT NULL      
        , CONSTRAINT ENQUETEUR_PK PRIMARY KEY (Id_Enqueteur)
        , CONSTRAINT ENQUETEUR_EQUIPE_FK FOREIGN KEY (Id_Equipe)
            REFERENCES EQUIPE (Id_Equipe)    
    ) ;
    
    CREATE TABLE RESPONSABLE
    (
            Id_Enqueteur              INT            NOT NULL
          , Id_Equipe                 INT            NOT NULL
        , CONSTRAINT RESPONSABLE_PK PRIMARY KEY (Id_Enqueteur)
        , CONSTRAINT RESPONSABLE_AK UNIQUE (Id_Equipe)
        , CONSTRAINT RESPONSABLE_ENQUETEUR_FK FOREIGN KEY (Id_Enqueteur)
            REFERENCES ENQUETEUR (Id_Enqueteur)
         , CONSTRAINT RESPONSABLE_EQUIPE_FK FOREIGN KEY (Id_Equipe)
            REFERENCES EQUIPE (Id_Equipe)
    ) ;
    
    

    Si le responsable d’une équipe doit appartenir à celle-ci, il faudra mettre en oeuvre un trigger pour que cette contrainte soit garantie.

    Exemple avec MySQL :

    
    CREATE TRIGGER RESPONSABLE_BEFORE_INSERT BEFORE INSERT ON RESPONSABLE 
    FOR EACH ROW
        BEGIN        
            IF EXISTS (SELECT '' FROM ENQUETEUR WHERE Id_Enqueteur = new.Id_Enqueteur AND Id_Equipe <> new.Id_Equipe) THEN
                SET @Erreur = CONCAT ('L''enquêteur ''', new.Id_Enqueteur, ''' peut être responsable de son équipe mais pas de l''équipe ''', new.Id_Equipe, '''.') ;
                SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = @Erreur ;            
            END IF ;
        END
    
    
    Un bout de jeu d’essai pour vérifier que la contrainte sera bien garantie :

    
    INSERT INTO EQUIPE (Id_Equipe, Nom_Equipe) VALUES
        (1, 'équipe 1'), (2, 'équipe 2'), (3, 'équipe 3'), (4, 'équipe 4')  ;
    
    INSERT INTO ENQUETEUR (Id_Enqueteur, Nom_Enqueteur, Id_Equipe) VALUES
        (1, 'Fernand', 1), (2, 'Raoul', 2), (3, 'Paul', 2), (4, 'Mado', 2) ;
    
    INSERT INTO RESPONSABLE (Id_Enqueteur, Id_Equipe) VALUES
        (1, 1) , (2, 3)
    
    
    (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.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous.

    Merci de vos réponses. cela m'a beaucoup aider dans la réalisation de mon MLD.

    Merci et à bientôt...

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

Discussions similaires

  1. transformation d'un diagramme MCD en MLD via UML
    Par patriot dans le forum UML
    Réponses: 3
    Dernier message: 21/11/2012, 15h07
  2. [MLD] Comment transformer cette partie d'un MCD en MLD?
    Par KheirEddine23 dans le forum Schéma
    Réponses: 1
    Dernier message: 20/06/2010, 15h03
  3. Transformation Héritage (MCD-MLD)
    Par ngwiamfr dans le forum Schéma
    Réponses: 4
    Dernier message: 07/03/2007, 00h13
  4. du MCD au MLD
    Par pit9.76 dans le forum Schéma
    Réponses: 7
    Dernier message: 09/06/2006, 12h55
  5. MCD ou MLD pour postgresql?
    Par jujuz dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/01/2005, 22h22

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