Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cardinalité maximale de type 2,2, MLD

Sujet résolu
    17 août 2020 à 15:21:00

    Bonjour,

    Ca fait un bout de temps que j'y réfléchi, et je ne trouve toujours pas comment passer en MLD.

    J'ai des caisses, chacune composées de 2 transpondeurs.

    Le fichier Json retourne à chaque fois une mesure associée à un seul transpondeur

    Vous pouvez voir le MCD ci-dessous.

    |Caisse|-2,2---(composée de)---0,1-|Transpondeur|-0,N--(est associé à)--1,1-|FichierJson|

    Le problème, c'est que je m'arrache les cheveux à composer mon MLD à partir de ça. Je ne trouve pas de ressources suffisantes sur le net pour répondre à ma question, ça parle très peu de cardinalités maximales connues, surtout de type 2,2 par exemple.

    Edit : J'imaginais diviser ma table tag en deux (tag01 et tag02), où une unique clé étrangère dans la table Fichier Json ferait référence aux deux tables. Sachant que l'ID_Tag ne se retrouvera jamais dans les deux tables en même temps.

    Qu'en pensez-vous?

    Je vous remercie d'avance,

    Simon

    -
    Edité par simonchauvet51500 17 août 2020 à 17:37:10

    • Partager sur Facebook
    • Partager sur Twitter
      19 août 2020 à 11:49:09

      Salut,

      Si tu es sûr qu'un transpondeur a exactement 2 caisses tu peut simplement mettre deux colonnes (FK) dans ta table Transpondeur : IdCaisseUn et IdCaisseDeux. Comme ça tu as une seule ligne dans Transpondeur, et autant de lignes que tu veux dans FichierJson, qui n'est liée qu'à Transpondeur, non ?

      • Partager sur Facebook
      • Partager sur Twitter
        20 août 2020 à 11:41:54

        Salut ! 
        C'est l'inverse, une caisse a exactement deux transpondeurs.
        Si on suit ton idée ça ferait ça :
         
        J'étais tellement la tête dans le guidon que je n'y avais pas pensé, merci !
        J'avais également une autre idée : 
        A voir ce qui serait le plus optimisé ?
        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2020 à 11:58:08

          Effectivement j'ai lu la cardinalité à l'envers dsl (l'habitude de UML).

          Il me semble que la solution 1 est plus simple.

          Sinon, tes IDs sont des string, pourquoi ? Tu as des caractères alpha dedans ?

          • Partager sur Facebook
          • Partager sur Twitter
            20 août 2020 à 14:48:58

            Effectivement, l'ID de mon fichier Json est un int et pas un string.

            Par contre l'ID du transpondeur est une suite de caractères du genre "E200001B3008011619706655". Je sais que ce n'est pas le plus optimisé pour lier des tables, mais je ne vois pas d'autre manière de faire (puisque le fichier Json renvoie à chaque fois des mesures dont un ID transpondeur). 

            A priori, l'ID des transpondeurs est à chaque fois unique, donc pas de problème de ce coté.

            • Partager sur Facebook
            • Partager sur Twitter
              20 août 2020 à 15:33:32

              Pour lier les tables tu peux utiliser des ID numériques générés automatiquement (autoincrémentés) par la BDD. C'est ce qu'on fait en général pour pas s'emmerder, c'est plus simple pour comprendre la BDD comme on sait que chaque table a un ID et des FK de la même forme, et plus optimisé.

              Comme ça il suffit d'ajouter les colonnes qu'on veut, y compris un ID string venant de l'extérieur, peu importe. Et si demain l'ID du transp venait à changer pour une raison X il suffit d'updater une seule ligne dans une seule table.

              -
              Edité par FredLass 20 août 2020 à 15:33:58

              • Partager sur Facebook
              • Partager sur Twitter
                21 août 2020 à 17:40:28

                Oui je comprend

                le problème, c'est que j'utilise un programme qui renvoie plusieurs set de valeurs dans FichierJson, dont l'ID_Transpondeur (prenons par exemple E200001B3008011619704321).

                Si je me basais sur ce que tu proposes, il faudrait dans ce cas là que le programme trouve l'ID_Transpondeur (un int, donc) selon sa valeur associée (E200001B3008011619704321) dans la table transpondeur puis insère la valeur de l'ID_Transpondeur correspondant dans la clé étrangère de la table FichierJson ? Ou il y a plus simple ?

                • Partager sur Facebook
                • Partager sur Twitter
                  26 août 2020 à 10:35:11

                  Bonjour,

                  Peux-tu repréciser ton problème, j'ai du mail à saisir ...

                  Si un transpondeur peut être dans une seule caisse, la clé étrangère se trouverait dans la table transpondeur :

                  • caisse ( id_caisse [pk], etc. )
                  • transpondeur ( id_transpondeur [pk], id_caisse [fk], etc. )
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    26 août 2020 à 16:57:27

                    Tu peux utiliser LAST_INSERT_ID (avec MySQL) pour éviter de faire deux insert séparés :

                    https://stackoverflow.com/questions/4775520/how-to-insert-values-in-table-with-foreign-key-using-mysql

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 août 2020 à 10:23:46

                      Bonjour,

                      C'est au final la solution que j'ai adopté Benzouye.

                      Merci beaucoup FredLass ! 

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Cardinalité maximale de type 2,2, MLD

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown