Partage
  • Partager sur Facebook
  • Partager sur Twitter

Relations entre tables

Sujet résolu
    18 juillet 2011 à 20:36:24

    Bonjour

    Imaginons une simple table « membres » par exemple. Cette table a une colonne « id », qui est la clé primaire de la table, unique.

    Imaginons ensuite une autre table contenant par exemple les articles des membres. On aurait une table « membres_articles », avec une colonne « membre_id », qui contiendrait l'id du membre auteur de l'article.

    J'avais souvenir d'avoir lu quelque part qu'il existait un moyen de lier ces tables (et plus particulièrement les champs membres_articles.membre_id et membres.id). L'avantage qu'offrait cette solution était que si on supprimait un membre, cela supprimait automatiquement toutes les entrées de « membres_articles » dont le champ membres_articles.membre_id était égal à l'id du membre supprimé (et même les entrées d'une autre table si elle était liée à la table « membres » de la même façon que « membres_articles »). Mais voilà, je n'ai plus aucune idée de comment c'est faisable, ni même le nom de ce concept, donc pour chercher sur google c'est un peu difficile.

    Si quelqu'un pouvait m'expliquer comment une telle chose est réalisable, et éventuellement m'orienter vers un article plus approfondi, je lui en serais très reconnaissant.

    Merci d'avance à tout le monde !
    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2011 à 12:47:09

      Bonjour,

      Je n'ai pas trop le temps de t'expliquer tout en détail, mais je vais faire au mieux.
      En effet, lorsque tu crées ta clé étrangère sur la colonne membre_id de la table "articles", il faut préciser l'option ON DELETE CASCADE.

      Pour comprendre mieux de quoi je parle, voici un simple exemple :
      CREATE TABLE membres
      (id INT,
      pseudo VARCHAR(30),
      PRIMARY KEY (id));
      
      CREATE TABLE articles
      (id INT,
      contenu TEXT,
      membre_id INT,
      PRIMARY KEY (id),
      FOREIGN KEY (membre_id) REFERENCES membres(id) ON DELETE CASCADE);
      


      On crée donc les 2 tables prises dans ton exemple et on suppose qu'elles sont correctement remplies.
      Si je n'avais pas précisé l'option ON DELETE CASCADE, tu ne pourrais simplement pas supprimer des membres ayant rédigés des articles (d'où l'intérêt d'une contrainte d'intégrité référentielle qui est la clé étrangère "reliée" à la clé primaire d'une table). Mais grâce à cette option, lorsque tu supprimes un membre qui a rédigé un ou plusieurs articles, alors tous ses articles seront également supprimés automatiquement.

      Si tu n'es pas sûr de la syntaxe suivant le SGBD que tu utilises (en général elle est standard), ou pour avoir plus d'informations, une simple recherche avec le nom de ton SGBD + ON DELETE CASCADE devrait te donner pas mal de résultats.
      • Partager sur Facebook
      • Partager sur Twitter
        19 juillet 2011 à 15:36:51

        Ok merci à vous, c'était bien les clés étrangères que je cherchais !

        Il y avait astron qui avait répondu en premier, donc j'ai pu jeter un coup d'œil au tuto de Taguan (notamment cette partie) et j'ai pu créer les relations. Le truc, c'est que j'ai pas mis de "ON DELETE CASCADE" car je n'en avais pas connaissance (merci Bluerat !). Est-ce que je peux apporter le ON DELETE CASCADE à coup de ALTER TABLE ou je dois supprimer la contrainte et la recréer avec cette option ?
        • Partager sur Facebook
        • Partager sur Twitter
          19 juillet 2011 à 15:42:51

          Grâce à ALTER TABLE, tu supprimes (DROP) la contrainte et tu la recrées (ADD) tout simplement.
          • Partager sur Facebook
          • Partager sur Twitter
            19 juillet 2011 à 16:35:56

            Ok tout fonctionne maintenant. Merci à vous !
            • Partager sur Facebook
            • Partager sur Twitter

            Relations entre tables

            × 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