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

Merise Discussion :

[MCD] Soucis de modélisation


Sujet :

Merise

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [MCD] Soucis de modélisation
    Bonjour à tous,

    Je suis actuellement en stage et je souhaite modéliser un truc mais je n'y arrive pas donc je viens vous demander votre aide
    Voici donc mon problème :
    Je souhaiterai modéliser le fait que 1 module est dispensé dans une ou plusieurs filières mais peut être aussi dispensé dans une spécialité de cette filière.
    ex: Le cours Historique du droit est dispensé dans la filière droit
    le cours droit informatique est dispensé dans la filière droit mais uniquement dans la spécialité informatique
    J'ai donc fait 1 entité "module" qui contient un ID ainsi que le nom de module
    1 entité "Filière" qui contient un id et un nom de filière

    Cependant pour la spécialité je ne sais pas comment faire. J'ai fait un héritage sur filière mais je ne suis pas sûr.
    Je pensais aussi à faire une relation à 3 avec une entité spécialité et relier les entités filière et spécialité entre elles.

    Qu'en pensez vous ?

    Merci pour votre aide

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 3
    Points
    3
    Par défaut merise
    Bonjour!
    D'après tes explication on aura ceci:

    - Module (codeMd*,....)
    - Filière(CodeFil,Codpécialité#,....) avec code spécialité comme lé étrangère. Une filiere fait partie de 1 et 1 seule spécialité et dans une spécialité on a une ou plusieurs filières...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci de ton aide tout d'abord.
    En fait c'est une spécialité fait partie de 1 et 1 seule filière et une filière a plusieurs spécialités.

    Donc ça fait 3 entités?
    -Module(id, nom)
    -Filière(id filière, nom,#Id Spécialité)
    -spécialité(Id spécialité, nom)

    [module] ---(1,n)-- est dispensé --- (1,n) --- [Filière] --- (1,n) ---- avoir --(1,1) ---- [Spécialité]
    Es tu d'accord avec ceci ?

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 899
    Points
    30 899
    Billets dans le blog
    16
    Par défaut
    Bonsoir,



    En fait, il faut modéliser une contrainte d’exclusion : un module d’une filière ne doit pas appartenir à l’ensemble composé par les modules des spécialités des filières tout comme un module d’une spécialité ne peut pas appartenir à l’ensemble composé par les modules des filières. Le MCD ci-dessous (réalisé avec PowerAMC) a pour objet de traduire cette contrainte (laquelle n’est pas prise en compte par PowerAMC, elle est donc représentée à l’aide de PAINT...) :


    Noter l’utilisation de l’identification relative (propre à PowerAMC : cardinalités 1,1 mise entre parenthèses sur la patte connectant SPECIALITE et SPE_FIL), cela pour qu’au niveau du MLD, l’attribut FiliereId « remonte » jusqu’à SPE_MOD :




    Du point de vue SQL :

    TABLE MODULE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE MODULE 
    (
       ModuleId             INT              NOT NULL,
       ModuleNom            VARCHAR(64)      NOT NULL,
       CONSTRAINT MODULE_PK PRIMARY KEY (ModuleId)
    ) ;

    TABLE FILIERE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE FILIERE 
    (
       FiliereId            INT              NOT NULL,
       FiliereNom           VARCHAR(64)      NOT NULL,
       CONSTRAINT FILIERE_PK PRIMARY KEY (FiliereId)
    ) ;

    TABLE FIL_MOD
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE FIL_MOD 
    (
       ModuleId             INT              NOT NULL,
       FiliereId            INT              NOT NULL,
       CONSTRAINT FIL_MOD_PK PRIMARY KEY (ModuleId, FiliereId),
       CONSTRAINT FIL_MOD_MODULE_FK FOREIGN KEY (ModuleId)
          REFERENCES MODULE,
       CONSTRAINT FIL_MOD_FILIERE_FK FOREIGN KEY (FiliereId)
          REFERENCES FILIERE
    ) ;

    TABLE SPECIALITE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE SPECIALITE 
    (   
       FiliereId            INT              NOT NULL,
       SpecialiteId         INT              NOT NULL,
       SpecialiteNom        VARCHAR(64)      NOT NULL,
       CONSTRAINT SPECIALITE_PK PRIMARY KEY (FiliereId, SpecialiteId),
       CONSTRAINT SPECIALITE_FILIERE_FK FOREIGN KEY (FiliereId)
          REFERENCES FILIERE
    ) ;

    TABLE SPE_MOD
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE SPE_MOD 
    (
       ModuleId             INT              NOT NULL,
       FiliereId            INT              NOT NULL,
       SpecialiteId         INT              NOT NULL,
       CONSTRAINT SPE_MOD_PK PRIMARY KEY (FiliereId, ModuleId, SpecialiteId),
       CONSTRAINT SPE_MOD_MODULE_FK FOREIGN KEY (ModuleId)
          REFERENCES MODULE,
       CONSTRAINT SPE_MOD_SPECIALITE_FK FOREIGN KEY (FiliereId, SpecialiteId)
          REFERENCES SPECIALITE
    ) ;

    Un trigger (façon MS SQL Server) pour surveiller les INSERT dans la table FIL_MOD :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE TRIGGER FIL_TR_INS ON FIL_MOD INSTEAD OF INSERT AS
        DECLARE @N AS INT ; 
     
        SET @N  = 
                 (
                  SELECT COUNT(*)
                  FROM
                      (
                       SELECT x.ModuleId, x.FiliereId 
                       FROM   SPE_MOD AS x JOIN INSERTED AS y ON x.ModuleId = y.ModuleId 
                                                             AND x.FiliereId = y.FiliereId  
                      ) AS x
                 ) ; 
        IF @N > 0
            /* ---------------------------
                  Infraction détectée
            */ ---------------------------
            BEGIN
                RAISERROR ('INSERT Module - Filière : Le module est déjà utilisé pour une spécialité de la filière', 16, 1)
                RETURN
            END
        /* -----------------------------------------------------
             Si pas d'infraction, on peut effectuer l’insert
        */ -----------------------------------------------------
        INSERT INTO FIL_MOD (ModuleId, FiliereId)
            SELECT ModuleId, FiliereId
            FROM   INSERTED ;

    Reste à prévoir un trigger du même tabac pour interdire l’insertion dans la table SPE_MOD de paires {ModuleId, FiliereId} déjà présentes dans la table FIL_MOD, sans oublier les triggers en cas d’UPDATE des tables FIL_MOD et SPE_MOD.
    (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.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Vérification
    Bonjour Fsmrel,

    Merci d'avoir pris le temps de répondre à mon problème, j'ai maintenant compris
    Voici donc le MCD que j'ai réalisé sous Win'Design à l'aide de tes informations mais je ne suis pas sûr que cela soit bon car je n'ai jamais fait de contrainte d'exclusivité auparavant.
    Pourrais-tu me confirmer si la partie du MCD concernant cette contrainte entouré en rouge est bonne stp ?
    Merci d'avance

    Nom : MCD.JPG
Affichages : 1278
Taille : 58,7 Ko

    [EDIT] Autre problème: Je souhaite mettre IdSpecialité en auto incrément mais voici l'erreur que MYSQL me met
    #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
    Aurais-tu une solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS SPECIALITE 
    (   
       IdFiliere            INT(11)              NOT NULL,
       IdSpecialite         INT(11)              NOT NULL AUTO_INCREMENT,
       NomSpecialite        VARCHAR(64)      NOT NULL,
       CONSTRAINT PK_SPECIALITE PRIMARY KEY (IdFiliere, IdSpecialite),
       CONSTRAINT FK_SPECIALITE_FILIERE FOREIGN KEY (IdFiliere)
          REFERENCES FILIERE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 899
    Points
    30 899
    Billets dans le blog
    16
    Par défaut
    Bonsoir s0nyk,


    Je n’ai pas WinDesign, il m’est donc difficile de répondre concernant la modélisation de la contrainte d’exclusion en ce qui concerne les pivots : il faudra que vous regardiez ce qu’il produit...

    En tout cas, même si ça n’est pas une nécessité absolue, vous pourriez déjà identifier SPECIALITE relativement à FILIERE : cardinalité "1,1 (R)" portée par la patte connectant SPECIALITE et RELATION SPECIALITE FILIERE.

    Concernant MySQL, celui-ci exige que, si vous utilisez un auto-incrément, la colonne concernée soit seule à participer à la clé primaire (cela relève de l’identification absolue). Vous pouvez vous inspirer de la technique proposée par CinePhil dans le contexte de l’identification relative.



    Merci d'avoir pris le temps de répondre à mon problème, j'ai maintenant compris
    Alors n’oubliez de voter dans ces cas-là...
    (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.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai effectué les modifications au niveau du MCD et cela donne effectivement le même MLD.
    Encore merci pour l'aide.

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

Discussions similaires

  1. Petit souci de modélisation ( mcd merise)
    Par Anthoto dans le forum Schéma
    Réponses: 0
    Dernier message: 04/01/2011, 10h01
  2. Petit souci de modélisation vers MPD avec rational rose
    Par pburgisser dans le forum Outils
    Réponses: 3
    Dernier message: 02/01/2009, 22h19
  3. Réponses: 7
    Dernier message: 26/05/2008, 00h05
  4. [MCD] question de modélisation
    Par Beltegeuse dans le forum Modélisation
    Réponses: 4
    Dernier message: 09/04/2008, 16h43
  5. [MCD] Problème de modélisation d'un QCM
    Par Dam)rpgheaven dans le forum Schéma
    Réponses: 1
    Dernier message: 14/01/2008, 23h57

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