Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide MCD

    13 mai 2022 à 8:53:16

    Bonjour,
    Je sollicite votre avis sur un MCD que je viens de réaliser.
    Étant novice dans le domaine, pouvez vous me dire si vous pensez qu'il est correct ou pas svp.
    Énoncé :
    Une entreprise souhaite mettre sur son site des tests de personnalité a destination de ses clients.
    Il n'existe pour l'instant qu'un seul test de disponible mais d'autres seront ajoutés à l'avenir.
    Le test consiste en une série de 24 questions comportant chacune 4 adjectifs.
    Pour chaque question, l'utilisateur doit cocher l'adjectif lui correspondant le plus et celui lui correspondant le moins.
    A chaque adjectif correspond 2 phrases : synonyme et antonyme, que l'on trouvera dans le compte rendu finale.
    Chaque adjectif représente un trait de personnalité différent.
    Il existe 4 traits de personnalité (d'où le fait qu'il y ait 4 adjectifs par question).
    A la fin du questionnaire, on fait la somme des réponses plus et moins pour déterminer le profil de l'utilisateur. 
    Pour chaque profil correspond un texte argumenté qui sera également dans le rapport final.
    Voici le diagramme UML que j'ai créé. Pouvez-vous me dire ce que vous en pensez svp. Notamment au niveau des multiplicités.
    Merci à tous.
    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2022 à 13:58:44

      Bonjour,

      Si chaque adjectif à forcément 2 phrases associées, alors ces deux phrases sont des attributs de l'entité adjectif et non des entités à part entière.

      Les cardinalités 1,n (comme "Défini") me paraisse inversée.

      Je ne sais pas quel logiciel de modélisation tu as utilisé, mais il faudrait regarder le SQL qui est généré et s'assurer que la clé étrangère est placée dans l'entité adjectif et non dans l'entité traitPerso.

      Si je devais refaire le modèle je ferai plutôt ceci :

      Avec une règle de gestion pour assurer que les adjectifs dans réponse soient cohérents avec le questionnaire.

      -
      Edité par Benzouye 13 mai 2022 à 13:59:42

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        13 mai 2022 à 17:45:42

         Bonjour Benzouye,

        Un grand merci pour ta réponse au top.

        1/ Concernant la cardinalité de "défini" :

        • Un adjectif défini 1 seul trait de personnalité
        • Un trait de personnalité peut être défini par plusieurs adjectifs.

        On aura bien une clé étrangère dans la table adjectif.

        2/ J'ai utilisé drawio pour dessiner ce MCD mais je ne sais pas si il peut générer le modèle relationnel. Tu en as peut être un à me conseiller ?

        3/ je ne comprends pas pourquoi tu as mis une date de réalisation dans la table test car pour moi cette table est uniquement la pour enregistrer les type de tests disponibles. Pour l'instant il n'y en a qu'un (Discol) mais à l'avenir il y en aura d'autres et je ne sais pas encore si ils seront sur le même principe (QCM) ou complètement différents.

         4/ J'ai fais les modifs au niveau de la table Adjectif. Tu as raison quand tu dis que chaque adjectif à forcément 2 phrases qui lui correspondent. Egalement pour la table type_user afin d'éviter les redondances dans la table user, mieux vaut créer une table à part.

        5/ J'ai fais une V2 de mon MCD en m'appuyant également sur une réponse que tu as faites à un problème quasi similaire au mien : https://openclassrooms.com/forum/sujet/organisation-dune-database-pour-un-qcm

         Ci-dessous la V2, dit moi si c'est mieux ou si y'a encore des choses à revoir. En tout cas, merci beaucoup pour ton aide très précieuse. 

        • Partager sur Facebook
        • Partager sur Twitter
          13 mai 2022 à 18:33:50

          CédricGiraudeau a écrit:

          Concernant la cardinalité de "défini" :

          • Un adjectif défini 1 seul trait de personnalité
          • Un trait de personnalité peut être défini par plusieurs adjectifs

          Donc avec UML les cardinalités sont affichées à l'inverse de celle du MCD ... c'est un truc à savoir :)

          CédricGiraudeau a écrit:

          J'ai utilisé drawio pour dessiner ce MCD mais je ne sais pas si il peut générer le modèle relationnel. Tu en as peut être un à me conseiller ?

          Personnellement je conseille Looping MCD (pour les modèles complexes) ou MoCoDo (pour les trucs rapides). Par contre ils ne font pas d'UML, "seulement" MCD puis conversion automatique en MLD puis SQL (multi-langage).

          CédricGiraudeau a écrit:

          je ne comprends pas pourquoi tu as mis une date de réalisation dans la table test car pour moi cette table est uniquement la pour enregistrer les type de tests disponibles

          OK, je comprend mieux la logique. Cela va faire évoluer ma réponse ... mais dis-toi bien que si tu a plusieurs type de test, tu vas avoir une multiplication de logiques différentes à modéliser en base et côté applicatif, finalement ton entité Test ne sert pas à grand chose ...

          Du coup je reprendrai mon modèle ainsi :

          Le principe :

          Bien sûr tu crées tes types, groupes, traits et adjectifs. Je rajoute un attribut niveau sur l'entité adjectif qui correspond au "poids" de l'adjectif par rapport à son trait de caractère (ce que tu avait noté plusD, moinsD dans ton premier modèle).

          Ensuite les profils peuvent se définir par un certain niveau par trait de caractère. Il y a donc une relation n,n entre ces deux entités, avec un attribut niveau.

          Un utilisateur est créé.

          Aujourd'hui il n'y a pas le choix dans les tests (mais même si il y en avait, ce serait un tout un pan de MCD qu'il faudrait créer), donc on enregistre sa participation au test Discol dans la table ... Discol ... qui dit simplement telle personne a passé un test Discol à telle date.

          La table de relation reponse enregistre les 24 adjectifs choisis par l'utilisateur lors de son test. Côté BDD il faudra mettre un mécanisme (TRIGGER) empêchant de créer plus de 24 réponses pour un même Discol. Et côté applicatif il faudra "simplement" mettre en place le tirage des 24 questions à 4 adjectifs (un par trait) en évitant les doublons (peut-être qu'il y a besoin de stocker ces tirages en base de données ???).

          Tu peux ensuite déterminer le profil de l'utilisateur pour un Discol donné (il pourrait en faire plusieurs) en fonction du niveau par trait de caractère des adjectifs choisis.

          -
          Edité par Benzouye 13 mai 2022 à 18:36:42

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            13 mai 2022 à 22:10:03

            Benzouye,

            Encore un fois merci pour le temps que tu m'accordes à m'aider sur ce sujet c'est vraiment très gentil de ta part et ca me sort bien de la panade :).

            1/ Pour la cardinalité de "défini" je me suis appuyé sur le cours suivant qui dit que dans une relation de 1 à plusieurs, la clé étrangère se situe dans la table qui est du coté plusieurs : https://openclassrooms.com/fr/courses/6938711-modelisez-vos-bases-de-donnees/7507122-transformez-les-associations-de-votre-diagramme-de-classes-uml#/id/r-7503307.

            J'espère avoir bien compris.

            2/ Merci pour les liens de vais regarder ca parce qu'en plus, je ne trouve pas drawio très pratique à l'utilisation.

            3/Concernant l'entité "Test", du coup tu me recommandes de ne pas la mettre ? C'est vrai qu'on aura quelque chose de complètement différent pour les autres tests donc autant garder les info dans la table discol comme tu as fais.

            4/ Par rapport au poids de l'adjectif, j'ai compris ce que tu voulais dire. Cependant dans la pratique c'est un peu plus complexe que ca. Toutes les réponses valent 1 poids (donc 48 poids au total car 2 réponses par question) et ensuite en fait la somme des poids par trait de personnalité pour les plus et les moins (adjectifs qui te correspondent le plus et le moins et que j'avais noté plusD, moinsD...). Il y a ensuite quelques règles à appliquer pour savoir quels traits seront retenus, il peut y en avoir 1, 2 3 ou 4 mais c'est plus rare. Cela veut dire qu'une personne n'a pas forcément qu'un trait de perso, elle peut en avoir plusieurs et en fonction du nombre de réponses liés à ce trait, le rapport final affichera un résultat différent. Il y a 36 profils différents en tout.

            Bref tout cela pour te dire que je ne suis pas sur que l'attribut niveau est du sens si l'on prend en compte cela.

            Cependant j'ai compris la logique et je vais m'en inspirer pour l'adapter.

            5/ Le dernier point concerne les résultats au 24 réponses que j'ai absolument besoin de garder en base car je devrai faire des statistiques ensuite. C'est pour cela que j'avais créé les nouvelles tables "Réponse" et "Choix". En fait ce que je souhaite faire c'est conserver les réponses aux questionnaires. Pour chaque question, il y a 2 réponses. Dans ma tête je me suis dis qu'il faut une table réponse qui, une fois transformée en MLD, contiendrait pour une réponse donnée les clés étrangères de l'id de l'adjectif, l'id du QCM et l'id du choix. Ce dernier pourrait prendre les valeurs suivantes : plus, moins ou NS (pour non sélectionné). De cette manière on conserve pour chaque adjectif, une valeur correspondant à la réponse de l'utilisateur. On pourrait même regénérer un rapport complet.

            Par contre je ne suis pas sur de la manière dont je l'ai modélisé. Entre ce que m'a tête souhaite faire et ce que j'arrive à transcrire, il y a un monde :).

            Voila. Désolé pour le pavé :p

            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2022 à 23:58:45

              CédricGiraudeau a écrit:

              dans une relation de 1 à plusieurs, la clé étrangère se situe dans la table qui est du coté plusieurs

              C'est apparemment applicable à UML, mais pas dans un MCD où c'est l'inverse (comme visible dans mon MCD pour les relations contient, est, définit et passe) ... mais c'est juste une question de formalisme, je n'ai jamais utilisé UML ...

              Concernant le poids des adjectifs je n'avais pas compris ainsi, et je comprends mieux maintenant. Du coup l'attributs niveau (ou "poids") ne doit pas être porté par l'adjectif, mais par la relation n,n reponse. Dans la table réponse seront stockées les 48 réponses (couple Discol/Adjectif) avec pour chacune un "poids" valant 1 ou 2.

              Cela répond aussi à ton 5ème point, toutes les réponses sont bien enregistrées/stockées. Quand je disais "stocker les tirages en base" je voulais dire "stocker les 24 propositions de 4 adjectifs" pas seulement les 48 adjectifs choisis.

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Aide MCD

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown