Partage
  • Partager sur Facebook
  • Partager sur Twitter

Base de données sans clés étrangères

Sujet résolu
    9 mai 2019 à 15:13:09

    Bonjour, 

    Je  travaille actuellement avec une grande base de données dont j'ai absolument le besoin de de voir toutes les liaison entre les table avec le concepteur sous phpMyAdmin , cependant , je vois qu'il n'y a pas de clé étrangères , j'ai repéré quelques liaisons assez évidentes a l’œil nu entre des tables  , et j'arrive bizarrement a faire des jointure entre les tables sans les clés étrangères , j'ai vu que toutes les tables ont des index , je suppose que c’est une autre manière de relier les tables ,pouvait vous donc m'éclaircir par rapport a cela ? peut-être me conseiller un cours particulier sur le sujet ou une astuce pour transformé la base donnée en une base a clés étrangères , merci d'avance :D !

    Bonne aprem !

    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2019 à 15:24:04

      Bonjour,

      Les jointures fonctionnent sans contrainte ... Il suffit que les colonnes soient de même type dans les tables liées, pas plus ...

      M.YassineLguirati a écrit:

      j'arrive bizarrement a faire des jointure entre les tables sans les clés étrangères

      Les clés étrangères n'ont pas pour rôle de permettre les jointures entre les tables ... Ce sont "simplement" des contraintes d'intégrité qui vont empêcher d'utiliser des valeurs incohérentes entre la table de référence et la table liée.

      M.YassineLguirati a écrit:

      toutes les tables ont des index , je suppose que c’est une autre manière de relier les tables

      Les index n'ont pas pour rôle de permettre les jointures entre les tables ... Ce sont "simplement" des contraintes qui vont assurer de meilleures performances, notamment dans les jointures ou les recherches ...

      M.YassineLguirati a écrit:

      une astuce pour transformer la base donnée en une base a clés étrangères

      Pas d'autre astuce que de créer manuellement les contraintes nécessaires ... Personne ne pourra les inventer à ta place ...

      M.YassineLguirati a écrit:

      une grande base de données

      C'est à dire ? Combien de tables dans le schéma ? C'est ce nombre qui va induire la quantité de travail pour créer les FK ...
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        9 mai 2019 à 15:36:12

        Benzouye a écrit:

        Bonjour,

        Les jointures fonctionnent sans contrainte ... Il suffit que les colonnes soient de même type dans les tables liées, pas plus ...

        M.YassineLguirati a écrit:

        j'arrive bizarrement a faire des jointure entre les tables sans les clés étrangères

        Les clés étrangères n'ont pas pour rôle de permettre les jointures entre les tables ... Ce sont "simplement" des contraintes d'intégrité qui vont empêcher d'utiliser des valeurs incohérentes entre la table de référence et la table liée.

        M.YassineLguirati a écrit:

        toutes les tables ont des index , je suppose que c’est une autre manière de relier les tables

        Les index n'ont pas pour rôle de permettre les jointures entre les tables ... Ce sont "simplement" des contraintes qui vont assurer de meilleures performances, notamment dans les jointures ou les recherches ...

        M.YassineLguirati a écrit:

        une astuce pour transformer la base donnée en une base a clés étrangères

        Pas d'autre astuce que de créer manuellement les contraintes nécessaires ... Personne ne pourra les inventer à ta place ...

        M.YassineLguirati a écrit:

        une grande base de données

        C'est à dire ? Combien de tables dans le schéma ? C'est ce nombre qui va induire la quantité de travail pour créer les FK ...

        Merci pour ta réponse :D ! la base contient 52 tables , j'ai pour mission de détecter des données venant du site dans la base sachant que je n'ai pas le code du site et du coup je suis obligé , a mon avis , de relié toutes les tables pour enlever du moins toutes les ambiguïté  ..



        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2019 à 15:52:11

          52 tables ce n'est pas énorme, si les noms (tables, colonnes) sont cohérents ce sera assez vite fait d'identifier les relations.

          Ensuite tu pourras ajouter les contraintes de clés étrangère au fur et à mesure, en espérant qu'il n'y ait pas d'incohérence existante qui bloquerait leur mise en place.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            9 mai 2019 à 16:22:42

            le problème c'est que des fois je reçois des erreurs de ce genre : 

            Cannot add or update a child row: a foreign key constraint fails (`nombase`.`#sql-1a50_1ee`, CONSTRAINT `listing_id_FKAUTPER` FOREIGN KEY (`author_id`) REFERENCES `people` (`id`)

            • Partager sur Facebook
            • Partager sur Twitter
              9 mai 2019 à 16:52:52

              Bonjour,

              C'est sans doute que la contrainte n'est pas respectée a priori.

              Tu dois déjà avoir une incohérence.

              • Partager sur Facebook
              • Partager sur Twitter
                9 mai 2019 à 17:35:54

                M.YassineLguirati a écrit:

                Cannot add or update a child row: a foreign key constraint fails (`nombase`.`#sql-1a50_1ee`, CONSTRAINT `listing_id_FKAUTPER` FOREIGN KEY (`author_id`) REFERENCES `people` (`id`)

                philodick a écrit:

                C'est sans doute que la contrainte n'est pas respectée a priori.

                Même sans a priori ... L'erreur t'indique qu'il y a une valeur dans la colonne author_id qui n'existe pas dans la colonne id de la table people ...

                Benzouye a écrit:

                tu pourras ajouter les contraintes de clés étrangère au fur et à mesure, en espérant qu'il n'y ait pas d'incohérence existante qui bloquerait leur mise en place.

                Il y a donc des incohérences, l'intégrité de la base est compromise ... justement parce que les contraintes de clé étrangère n'étaient pas en place ...

                Bon courage !

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

                Base de données sans clés étrangères

                × 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