Partage
  • Partager sur Facebook
  • Partager sur Twitter

Clé étrangere phpmyadmin

Question toute bête

    22 avril 2011 à 15:38:20

    Bonjour j'ai une petite question toute bête...je suis entrain de créer une base de données MySql sur PhpMyAdmin et je me pose la question suivante :

    Suis-je obligé de mettre des noms différents pour les clés étrangeres...

    je m'explique :

    j'ai les tables

    COMMANDE(IdCommande,#QuiCommande,...)
    DEMANDEUR(IdDemandeur,...)


    Ma question est de savoir si la clé étrangère #QuiCommande qui fait référence à IdDemandeur aurait pû elle-même s'appeler #IdDemandeur où si c'est strictement interdit de l'appeler par le même nom...ou alors si c'est simplement déconseillé...

    En espérant avoir été assez clair ^^

    Merci d'avance

    Cordialement
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 avril 2011 à 16:37:26

      Non, tu ne peux pas.

      Il faut bien comprendre que ce sont deux colonnes quelconques, et comme toute colonne, elles doivent avoir un nom unique. Le fait qu'il y ai "par-dessus" des contraintes de clé primaire et de clé étrangère n'a aucun lien.
      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2011 à 18:22:15

        Citation : Enax

        Non, tu ne peux pas.



        Effectivement si tu veux respecter la norme tu ne peux pas... En suivant toutes les étapes de modélisation MERISE, normalement à un moment tu dois définir un dictionnaire de données puis l'épurer. Un petit site ici où tu peux voir toutes les étapes et comment épurer ton dictionnaire...

        Après en pratique rien ne t’empêche d'appeler deux attributs de la même façon... C'est juste que tu ne suivra pas la norme... Et que (parfois :p ) s'il existe des normes c'est qu'il y a une raison.

        A mon stage je sais qu'ils avaient l'habitude d'écrire les clés étrangères à l'envers. Par exemple idDemandeur <-- #demandeurId.
        Personnellement j'ai jamais vraiment aimé cette méthode mais si ça peut t'aider!
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 avril 2011 à 19:38:48

          A moins que j'ai mal compris, il ne parle pas de la contrainte mais de la colonne. Et là tu ne peux pas.
          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2011 à 20:56:14

            Citation : Enax

            A moins que j'ai mal compris, il ne parle pas de la contrainte mais de la colonne. Et là tu ne peux pas.



            Heuu si t'as bien compris (à moins que ce soit moi qui comprenne pas :) ).

            Ce que j'ai compris c'est qu'il aimerait faire :

            COMMANDE(IdCommande,#IdDemandeur,...)
            DEMANDEUR(IdDemandeur,...)


            Il y a bien deux colonnes de même nom mais pas dans la même table donc c'est tout à fait possible.
            Testé et approuvé à l'instant sur PhpMyAdmin.

            Par contre je suis d'accord avec le fait qu'on ne puisse pas faire ça :

            TABLE(id, nom, id) // ici deux colonnes de même nom dans la même table et ERREUR MYSQL

            PS: Sinon oui j'ai fait un abus de langage en disant "la clé-étrangère" au lieu de "la colonne sur laquelle t'as la contrainte de clé étrangère" :D
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 avril 2011 à 2:54:01

              Effectivement, j'avais mal compris. Et puis ton premier message non plus d'ailleurs. Vendredi, fin de journée, toussa quoi... :p
              • Partager sur Facebook
              • Partager sur Twitter
                23 avril 2011 à 13:39:17

                Citation : Vodkada

                Ce que j'ai compris c'est qu'il aimerait faire :

                COMMANDE(IdCommande,#IdDemandeur,...)
                DEMANDEUR(IdDemandeur,...)


                Il y a bien deux colonnes de même nom mais pas dans la même table donc c'est tout à fait possible.



                Non seulement c'est possible, mais c'est la manière normale (et recommandée) de procéder.
                Comme les 2 colonnes contiennent la même chose (hé oui c'est une relation), il est logique qu'elles aient le même nom !

                Cela permet d'utiliser la syntaxe fort pratique t1 JOIN t2 USING (nom_colonne)

                Le seul cas où les 2 colonnes ne peuvent pas avoir le même nom, c'est si t'as une table avec 2 relations sur la même, par exemple table d'amis (relation N-N entre utilisateurs) ou arbre (node_id et parent_id référence node_id) ce genre de trucs...
                • Partager sur Facebook
                • Partager sur Twitter
                  23 avril 2011 à 13:53:11

                  Citation : Lord Casque Noir

                  Non seulement c'est possible, mais c'est la manière normale (et recommandée) de procéder.
                  Comme les 2 colonnes contiennent la même chose (hé oui c'est une relation), il est logique qu'elles aient le même nom !

                  Cela permet d'utiliser la syntaxe fort pratique t1 JOIN t2 USING (nom_colonne)



                  C'est exacte oui!
                  Je retire alors tout ce que j'ai dis sur le dictionnaire épuré puisque qu'on l'élabore avant le MCD et que les colonnes avec contraintes n'apparaissent qu'à pas partir du MLR! Désolé :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 avril 2011 à 14:55:53

                    Ouais.
                    Y'a pas de conflit avec le dictionnaire de données pour le nommage puisque les 2 colonnes contiennent la même chose ...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Clé étrangere phpmyadmin

                    × 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