Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une clé étrangère plusieurs références

Sujet résolu
    22 décembre 2010 à 19:05:26

    Bien le bonsoir,

    Alors voila, je suis face à un problème de conception de ma bdd.

    J'ai une table article et une table image, j'aimerais pouvoir installer un système de commentaire pour ces deux système.
    J'ai donc commencé par créer une table commentaire pour chacune des tables (Article et images) avec une clé étrangère qui récupère l'id de l'article ou de l'image commenté.
    Sauf que ça me fait deux tables avec des champs identiques et je n'aime pas ça.
    J'ai donc pensé a faire une seule table commentaire avec une clé étrangére qui pointe vers l'id de l'article ou de l'image, et pour ne pas avoir de problème avec les ids je rajouterais un champs "type" qui vaudrait "article" ou "image".

    Sauf que ça ne me semble pas super propre tout ça. L’intégrité référentiel est mise à mal.
    Donc, y a t'il un moyen plus propre pour faire cela ?
    • Partager sur Facebook
    • Partager sur Twitter
      22 décembre 2010 à 19:52:43

      bonjour,
      l'idée est bonne.
      Pour l'intégrité référentielle tu peux la contrôler par script et/ou éventuellement avec un trigger.
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2010 à 19:55:02

        Je vais donc de ce pas voir ce qu'est un trigger en sql o.o
        Merci =)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 décembre 2010 à 20:29:32

          Pour moi l'idée n'est pas bonne. C'est un brainfuck pour rien.

          Garde tes deux tables. C'est beaucoup plus simple et naturel à gérer.
          Il est tout à fait légitime d'avoir une table pour les commentaires des images et une autre table pour les commentaires des articles. Même si actuellement les colonnes sont identiques, peut-être que cela évoluera, et de toutes manières ce sont deux choses différentes.

          Quant au nombre de tables, "sa fait deux table" (au lieu de une ?)... c'est faire dans l'émotionnel, autant mettre les articles et les images dans une seule table avec les commentaires.....

          J'avais fait la BDD d'un site de gestion de tablatures.
          Il y avait possibilité de commenter les tablatures, les artistes, les albums, les morceaux, les news, les profil membre, etc.... autant de tables commentaires (certaines dont les colonnes variaient certes). Aucun soucis.

          Gérer l'intégrité référentielle avec un trigger.... pourquoi pas gérer l'unicité d'une clé primaire avec un trigger ?
          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2010 à 22:07:16

            Bon du coups Cintre me met le doute,
            Je prendrais bien l'avis d'une 3eme personne pour trancher xD

            Sachant que c'est aussi pour pouvoir centraliser la gestion des commentaires.
            N'y a t'il pas une pratique correct pour faire ce que je veux faire ?

            Or mis celle de créer x tables commentaires & co pour x modules qui ont besoin d'un système de commentaire ? "Bizarrement", je trouve qu'avoir x tables strictement identique (or mis la clé étrangère) n'est pas super optimisé (mais en même temps j'ai pas de solution à donner xD)
            • Partager sur Facebook
            • Partager sur Twitter
              22 décembre 2010 à 22:36:59

              re,
              Cintre Sournois, comme d'habitude, avec son manque de politesse (pas de bonjour, ...) et son désir de confrontation (pas seulement une proposition mais toujours et aussi une contradiction, une confrontation) soulève parfois des problématiques intéressantes. C'est la forme qui va mal, pas le fond.
              Bref ...
              attends plusieurs propositions et choisis ...
              Sa proposition nécessitera éventuellement de nombreuses jointures, coûteuses, dans certains cas.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                22 décembre 2010 à 22:46:17

                Bonsoir,

                Citation : sicilien007


                Sa proposition nécessitera éventuellement de nombreuses jointures, coûteuses, dans certains cas.


                C'est ce genre de phrases qui incite à la confrontation............
                Je n'y peux rien.
                Image utilisateur



                Cordialement.
                • Partager sur Facebook
                • Partager sur Twitter
                  22 décembre 2010 à 22:56:08

                  Il suffit de ne mettre qu'une seul table commentaire mais avec deux champs qui contiendront une FK. Soit l'un l'identifiant d'une image et l'autre sera NULL soit l’identifiant d'un article et l'autre sera NULL. Comme ça tu as bien une seul table commentaire et pas de problème d’intégrité.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 décembre 2010 à 22:58:02

                    Quelques options possibles :

                    1- tu mets plusieurs tables
                    2- tu mets "une seule table commentaires avec une clé étrangére qui pointe vers l'id de l'article ou de l'image, et pour ne pas avoir de problème avec les ids je rajouterais un champs "type" qui vaudrait "article" ou "image"."
                    3- tu mets une seule table commentaires avec 2 colonnes article_id et image_id, chacune ayant une foreign key sur les tables en question
                    4- tu fais de l'héritage (article hérite de Node et image aussi, tu finis avec Drupal)

                    Personnellement je vote pour la 4 (uniquement si la structure du site s'y prète genre drupal = arbre et si tu as un ORM qui fait tout le boulot à ta place), sinon 1 ou 3, la 2 étant à exclure vu la prise de chou que ça sera pour gérer l'intégrité référentielle.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      22 décembre 2010 à 23:08:53

                      lol

                      Bon, je ne vous dit pas ce que je pense de NULL aujourd'hui alors ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 décembre 2010 à 23:10:07

                        Moi ça m’intéresse =)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 décembre 2010 à 23:12:17

                          re,
                          voilà ...
                          le + d'un forum ... pas toujours évident pour un débutant.
                          Des avis partagés, dé-partagés.
                          Je vote pour le forum soft ...
                          Des expériences différentes, des réflexions différentes, ...
                          Quant à l'icône de Cintre Sournois dans son post ... j'adore ... un vrai ayatollah !!!
                          Je préfère de loin les multiples propositions sereines de Lord Casque Noir et la tranquillité de pierreet.

                          PS : finalement Cintre Sournois commence à enrichir son lexique (Bonsoir, Cordialement, ...). Il va finalement apprendre à échanger plutôt que d'aboyer!



                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            22 décembre 2010 à 23:15:42

                            On va vite s’ennuyer s'il faut faire dans le politiquement correct et le mielleux.

                            PS: C'est pas de l'enrichissement de vocabulaire mais de l'ironie en fait.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 décembre 2010 à 23:20:40

                              J'ai déjà pensé à la technique 3, le problème étant que si à l'avenir je veux qu'on puisse commenter d'autres choses, un nouvelle *_id à chaque fois ça risque de vraiment faire degueu' cette fois ci xD

                              J'ai pas bien compris ce que tu voulais dire pour la technique 4, en passant j'utilise une framework PHP (CakePHP) et non un CMS. Cake permet la mise en place de la technique 2 assez facilement (celle que je voulais mettre en oeuvre), c'était surtout au niveau de la propreté que je me posais des questions.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 décembre 2010 à 23:44:42

                                Citation : Cintre Sournois

                                Bon, je ne vous dit pas ce que je pense de NULL aujourd'hui alors ?



                                Si tu fais ça, je dis ce que je pense de PHP. Avec les morceaux.

                                Citation : sicilien007

                                Je préfère de loin les multiples propositions sereines de Lord Casque Noir



                                Tu m'as jamais vu dire à un type que son code est une merde ?

                                Sur ce site il y a ... disons peut-être 3-4 gus dont le niveau en bases de données et SQL m'inspire du respect, dont le cintre, les webestres n'en font évidemment pas partie (suffit de voir comment le site rame pour valider un post)

                                Bref.

                                Je m'aperçois que je suis une andouille puisque j'ai déjà eu ce problème il y a un bon moment, et j'ai pas mis la solution que j'avais utilisée, disons que c'est le numéro 5 :

                                Sur un site il y avait des tas de trucs "commentables", et aussi un forum. Donc j'ai simplement créé pour chaque "machin qu'on peut commenter", un topic correspondant (l'id du topic étant stocké dans la table du "machin"). La mécanique du forum (code existant) prend le relais : il n'y a rien à coder. Le seul problème c'est que la FK est à l'envers (le truc commentable référence le topic et non l'inverse) mais rien d'insoluble avec un petit trigger, ou code applicatif surveillé par un ON DELETE RESTRICT.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 décembre 2010 à 0:00:45

                                  On va dire qu'on a fait le tour, je vous remercie pour vos participations ô combien enrichissantes =)

                                  Quant à la solution que je vais utiliser, j'en sais rien, la nuit porte conseil.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Une clé étrangère plusieurs références

                                  × 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