Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structure d'une Table avec un HISTORIQUE

Sujet résolu
    21 septembre 2020 à 9:04:51

    Bonjour, 

    J'ai besoin de créer un historique, 

    Mes Tables ressemble à ceci : 

    1 Exercice possède 1 objectif, et 1 objectif peut avoir plusieurs exercice avec id_exercice clés étrangère dans la table exercice. 

    Le problème c'est que je fait des calculs avec duree et objectif et je n'ai besoin de faire ses calculs que pour l'objectif qui est actuellement définit. 

    Je peux le gérer dans le SELECT pour dire de prend la date la plus récente, mais il me serais plus facile et surtout plus rapide d'ajouter une ligne avec Date = 00-00-0000 qui représente l'objectif et la durée en court.  

    Je voulais savoir si il y a un meilleur moyen de réaliser l'historique ?

    EDIT je viens de me rendre compte que le modèle est un peu plus complexe, je peux séparer exercice et type exercice, mais ça fait aussi intervenir le secteur... Je recrée un modèle et le reposte.

    Je vous remercie d'avance de vos réponse

    -
    Edité par DeveloSt 21 septembre 2020 à 9:17:37

    • Partager sur Facebook
    • Partager sur Twitter

    Site Internet : https://devst.go.yj.fr

      21 septembre 2020 à 9:28:51

      Bonjour,

      Attention dans ton modèle, le nom de la clé primaire de la table objectif est ambigu ... tu devrais mettre id_objectif pour que cela soit plus clair.

      Ensuite, je ne comprends pas le problème, si un exercice ne peut avoir qu'un seul objectif, tu peux directement faire tes calculs avec l'objectif renseigné sur l'exercice, sans plus de filtre, non ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        21 septembre 2020 à 10:15:08

        J'ai un exercice (numéros unique à chaque nouvelle séances) qui est associer à un sous-type d'exercice. 

        Les sous-type d'exercices sont rattaché aux différents secteurs. 

        L'objectif est définit sur chaque sous-type d'exercices 

        Le problème c'est que cette Objectif peut changer. 

        A chaque changement d'objectif on me demande de la sauvegarder (créer une nouvelle ligne avec la nouvelle valeur de l'objectif, la date de changement et le sous-type d'exercice) 

        Le problème c'est que si je fait ça il me faut prendre en compte uniquement la dernière date pour effectuer mes calculs avec l'objectif actuel (Je pense que je serais obliger de faire beaucoup de SELECT dans des SELECT).

        Une des solutions c'est de mettre une colonne permettant de dire que c'est cette objectif qui est actuellement en cours (Il n'y a pas moyen de faire mieux ?).   

        -
        Edité par DeveloSt 21 septembre 2020 à 10:28:13

        • Partager sur Facebook
        • Partager sur Twitter

        Site Internet : https://devst.go.yj.fr

          21 septembre 2020 à 10:25:58

          DeveloSt a écrit:

          Une des solutions c'est de mettre une colonne permettant de dire que c'est cette objectif qui est actuellement en cours

          Oui, je ne vois pas mieux ...

          Cela implique une relation n,n entre sous-type et objectif, et un attribut "actuel" booléen dans cette relation ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            21 septembre 2020 à 10:49:40

            Le sous type d'exercice ne peut avoir q'un seul objectif mais l'objectif peut changer. 

            Donc cela reviens à dire que le sous type d'exercice peut avoir plusieurs objectifs ? 

            (Au départ je ne pensais pas mettre de id_objectif) 

            Du coup ça me donne le modèle suivant. 

            EDIT : 

            Je retrouve le même problème avec exercice et sous-type. 

            un exercice peut avoir plusieurs sous type  mais comme l'exercice est associé un numéros unique pour chaque nouvelle séance, c'est toujours valable ? (car le numéros unique ne peut avoir qu'un sous-type) 

            D'ailleurs ai-je besoins d'un id_Exercice dans ce cas ? (car le numéros Exercice est déjà unique)  

            EDIT : une autre question, je voit souvent une table avec les colonnes adresse et ville,

            MAIS, une ville peut contenir plusieurs adresse et une adresse appartient à une ville, 

            DONC il faudrait normalement créer une deuxième Table avec id_ville, nomVille et une clés étrangère dans adresse id_ville ?

            -
            Edité par DeveloSt 21 septembre 2020 à 11:24:01

            • Partager sur Facebook
            • Partager sur Twitter

            Site Internet : https://devst.go.yj.fr

              21 septembre 2020 à 12:07:16

              DeveloSt a écrit:

              une ville peut contenir plusieurs adresse et une adresse appartient à une ville, 

              DONC il faudrait normalement créer une deuxième Table avec id_ville, nomVille et une clés étrangère dans adresse id_ville ?

              Oui.

              DeveloSt a écrit:

              Le sous type d'exercice ne peut avoir q'un seul objectif mais l'objectif peut changer

              Je suis sceptique ...

              Les différents utilisateurs ne peuvent-il pas avoir des objectifs différents pour le même exercice ?

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                21 septembre 2020 à 12:56:27

                Benzouye a écrit:

                DeveloSt a écrit:

                Le sous type d'exercice ne peut avoir q'un seul objectif mais l'objectif peut changer

                Je suis sceptique ...

                Les différents utilisateurs ne peuvent-il pas avoir des objectifs différents pour le même exercice ?

                NON, pour une fois c'est un peu plus simple :) 

                L'objectif est le même pour tous et ne dépend que du sous type d'exercice, c'est d'autres critères qui fait que les utilisateurs auront un score plus ou moins élevé par rapport à l'objectif. 

                -
                Edité par DeveloSt 21 septembre 2020 à 15:50:09

                • Partager sur Facebook
                • Partager sur Twitter

                Site Internet : https://devst.go.yj.fr

                  21 septembre 2020 à 17:34:21

                  Ok.

                  Je suis un peu perdu en fait. Pour moi la proposition suivante est correcte :

                  DeveloSt a écrit:

                  A condition de mettre un attribut "actuel" dans le relation "possède" valant 1 ou 0 selon le cas, et en t'assurant qu'un seul objectif peut avoir "actuel" = 1 pour un type d'exercice donné.

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

                    Benzouye a écrit:

                    A condition de mettre un attribut "actuel" dans le relation "possède" valant 1 ou 0 selon le cas, et en t'assurant qu'un seul objectif peut avoir "actuel" = 1 pour un type d'exercice donné.


                    OK, La colonne actuel contenant le Boolean, je l'avais mis dans la Table Objectif.

                    Sinon pour supprimer cette colonne "actuel", au lieu de faire un INSERT INTO dans la Table POSSEDE à chaque modification de l'objectif, je peux faire uniquement un UPDATE avec la dernière valeur de id_objectif crée ?  

                    -
                    Edité par DeveloSt 21 septembre 2020 à 17:44:22

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Site Internet : https://devst.go.yj.fr

                      21 septembre 2020 à 18:08:30

                      Mais là tu perds l'historique du coup ...

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                        21 septembre 2020 à 18:12:20

                        Non car, j'ai l'objectif plus la dateMAJ dans la Table Objectif.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Site Internet : https://devst.go.yj.fr

                          21 septembre 2020 à 20:27:53

                          Oui mais tu ne sais pas quelle était l'ancienne valeur de l'objectif... ou alors je ne comprends pas...

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                            22 septembre 2020 à 8:19:40

                            J'aurais par exemple : 

                            TYPE_EXERCICE             POSSEDE                   OBJECTIF

                            idT       Type                  idT    IdO              IdO   Obj    DateMAJ

                            1           A                       1       3                  1      10      2020-01-01

                            2           B                       2       4                  2      25      2020-01-01

                                                                                              3      55      2020-02-25

                                                                                              4      55      2020-05-14

                            OK je comprend du coup l'ID 1 et 2 de ma Table Objectif n'est relié à rien

                            DONC j'aurai la date à laquelle l'objectif à changé et la nouvelle valeur mais je ne pourrai plus retrouver à quelle type d'exercice il appartient. 

                            EDIT : Si je met la colonne de type Boolean dans la Table POSSEDE ou OBJECTIF ça reviens au même ?

                            -
                            Edité par DeveloSt 22 septembre 2020 à 8:40:02

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Site Internet : https://devst.go.yj.fr

                              22 septembre 2020 à 10:12:08

                              Il faut que ce soit dans la table possède ...

                              Avec ton exemple de données ce serait :

                              type_exercice
                              idTtype
                              1 A
                              2 B

                              objectif
                              idOObjDateMAJ
                              1 10 2020-01-01
                              2 25 2020-01-01
                              3 55 2020-02-25
                              4 55 2020-05-14

                              possede
                              idTidOactuel
                              1 1 0
                              2 2 0
                              1 3 1
                              2 4 1
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                22 septembre 2020 à 11:56:02

                                ok, merci Benzouye, je vais faire comme cela alors. 

                                Ca me demande juste un peu plus de travaille pour réorganiser ce que j'ai déjà et à refaire quelque Select avec les jointures. :( 

                                J'espère juste qu'il n'y aura pas de casse dans le fonctionnement. :)

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Site Internet : https://devst.go.yj.fr

                                Structure d'une Table avec un HISTORIQUE

                                × 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