Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MySQL/phpmyadmin] créer une vue relationnel

    12 mars 2019 à 23:03:52

    Bonjour à tous ,

    Je vous interpelle car je n'arrive pas à créer ma vue relationnel.

    J'ai importé deux base de données provenant du site sql.sh

    tble_ville et une tble_departement

    Je souhaite créer une clé étrangère sur le code de département

    mes deux tables ont d'enregistrer 

    departement_code  varchar(3) utf8_general_ci  non aucune  (+index)

    mais au moment de créer la clé étrangère je ne retrouve pas sur la seconde table la colonne sur laquelle mettre la clé étrangère.:(

    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2019 à 12:14:53

      Bonjour,

      On ne peut créer des contraintes de clés étrangères que pour faire référence à une clé primaire.

      Donc dans ton modèle, la table ville doit contenir une colonne departement_id de même type que la colonne departement_id de la table departement.

      Toi tu as mis une colonne departement_code qui n'est pas la clé primaire dans la table departement ...

      • 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 mars 2019 à 19:13:34

        Bonjour,

        ta réponse m'étonnant, j'ai été vérifier d'autres sources et il n'est pas nécessaire que les colonnes soient des clés primaires, il faut en revanche qu'elle soit identique et qu'elle soit en index.

        cours openclassroom

        Elle sont bien indexé, quand je vais dans vue relationnelle, je peux créer une clé étrangère sur la colonne, mais je ne la retrouve pas dans ma deuxième table, et cela, dans les deux cas. 

        il manque des photo à mon premier post:

        Dans ma deuxième colonne je sélectionne, departement, et dans la troisième colonne j'ai comme choix: departement_id.

        Dans ma deuxième colonne je sélectionne, departement, et dans la troisième colonne j'ai comme choix: ville_id et ville_slug (qui n'est pas une clé primaire.

        • Partager sur Facebook
        • Partager sur Twitter
          14 mars 2019 à 8:47:46

          born1 a écrit:

          il n'est pas nécessaire que les colonnes soient des clés primaires

          C'est vrai, j'ai été un peu trop catégorique dans ma réponse. Je vais reformuler : on ne devrait créer de clé étrangère que pour faire référence à une clé primaire ... Ainsi l'on profite de l'index de la clé primaire et de l'unicité de ses valeurs dans la table de référence.

          Cela ne change donc rien à ma remarque plus haut ...

          Dans ton modèle rien ne dit que la table département ne contiennent pas plusieurs fois le même code (même si en réalité ce devrait être le cas, MySQL ne peux pas le savoir). Donc soit tu mets une contrainte UNIQUE sur la colonne departement.departement_code, soit tu fais ce que j'ai expliqué précédemment.

          Mais comprends bien qu'il est grandement préférable d'utiliser la clé primaire pour construire ta clé étrangère.

          Après je suis curieux de voir le cours où ta as trouvé cet exemple ville/département ainsi structuré ...

          -
          Edité par Benzouye 14 mars 2019 à 8:49:43

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            14 mars 2019 à 12:04:54

            Alors, merci j'ai donc mis le departement_code en "unique" et j'ai pu enfin voir la colonne concerné en revanche j'ai une erreur "#1215 - Impossible d'ajouter des contraintes d'index externe"

            Mais je vous remercie! 
            • Partager sur Facebook
            • Partager sur Twitter
              14 mars 2019 à 13:42:02

              Peux-tu poster la requêtes qui retourne cette erreur ? Avec les CREATE TABLE des tables concernées ...

              Il faut faire attention à ce que les deux colonnes departement_code soient exactement du même type.

              Benzouye a écrit:

              Après je suis curieux de voir le cours où ta as trouvé cet exemple ville/département ainsi structuré

              -
              Edité par Benzouye 14 mars 2019 à 13:43:00

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

                le code qui me retourne la précédente erreur est: 
                Erreur
                Requête SQL :
                
                
                ALTER TABLE `villes` ADD  CONSTRAINT `fk_departement` FOREIGN KEY (`departement_code`) REFERENCES `site_devis`.`departement`(`departement_code`) ON DELETE SET NULL ON UPDATE RESTRICT;
                MySQL a répondu: Documentation
                
                #1215 - Impossible d'ajouter des contraintes d'index externe 

                et j'ai une seconde erreur en modifiant l'action:

                Erreur
                Requête SQL :
                
                
                ALTER TABLE `villes` ADD  CONSTRAINT `fk_departement` FOREIGN KEY (`departement_code`) REFERENCES `site_devis`.`departement`(`departement_code`) ON DELETE RESTRICT ON UPDATE RESTRICT;
                MySQL a répondu: Documentation
                
                #1452 - Cannot add or update a child row: a foreign key constraint fails (`site_devis`.`#sql-2b00_22a`, CONSTRAINT `fk_departement` FOREIGN KEY (`departement_code`) REFERENCES `departement` (`departement_code`))

                pour le (pseudo) cours il s'agit du lien que j'ai mis dans ma première réponse. cours openclassroom.

                quant au type j'ai joint en capture d'écran dans mon premier poste. j'ai vérifié le tout, il n'y a que le caractère unique que j'ai corrigé à colonne departement_code dans la table departement et qui grâce à ta réponse a permis de l'avoir dans les choix de la vue relationnelle.

                Si je prends en compte ce que tu conseilles, c'est à dire utiliser les clés primaires, quand un utilisateur crée un profil, il rentrera son nom , son prénom, son age, et sa localisation. Je me trouve obliger de créer un code qui récupère l'id_localisation et l'insérer après ou mysql peut faire une relation et corriger seul? 

                • Partager sur Facebook
                • Partager sur Twitter
                  14 mars 2019 à 16:18:18

                  La première erreur ... tu met SET NULL mais n'autorise pas le NULL ... donc erreur ...

                  Au passage, je te déconseille fortement le SET NULL. Dans la plupart des cas on garde RESTRICT par sécurité. Dans quelques cas précis on va utiliser CASCADE, mais vraiment que très rarement SET NULL ou NO ACTION ...

                  La seconde erreur signifie qu'au moins un enregistrement de la table villes a une valeur pour sa colonne departement_code qui n'existe pas dans la colonne departement_code de la table departement ... d'ailleurs pourquoi villes avec un S et pas de S à departement ?

                  born1 a écrit:

                  créer un code qui récupère l'id_localisation 

                  C'est quoi id_localisation ? Je ne vois aucun rapport avec la question en cours ...

                  Sinon, la liste des villes, des départements sont connues et exhaustives ... Ta table ville et ta table département devraient donc être remplie, et l'utilisateur n'a donc rien à renseigner à part rechercher sa ville dans la liste ... et toi de stocker l'id de la ville choisie ...

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    14 mars 2019 à 16:51:49

                    Benzouye a écrit:

                    d'ailleurs pourquoi villes avec un S et pas de S à departement ?

                    Alors là! C'est un singulier invariable :D.

                    Je vais corriger tout çà je remercie beaucoup pour ton aide, je vais plonger tête dans le guidon et tenter de résoudre tout cela!

                    -
                    Edité par born1 14 mars 2019 à 19:53:45

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [MySQL/phpmyadmin] créer une vue relationnel

                    × 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