Partage
  • Partager sur Facebook
  • Partager sur Twitter

Relation SQL

    13 novembre 2019 à 21:13:15

    Bonjour à tous,

    Je vous expose mon cas et je sais pas trop comment le résoudre à mon niveau.

    Je voudrais avoir une base de donnée qui va stocker un certain nombre de titre de livre et un certain nombre de lecteur.

    Je souhaite séparer la table des lecteurs de la table des livres et les lié par un id.

    Comment je pourrais faire pour éviter les doublons avec les jointures ?

    Je m'explique, un lecteur peut avoir accès à plusieurs livres.

    L'idée de base est de créer un champ id_livre dans la table lecteur qui sera lié à l'id du livre.

    Mais si le lecteur a accés à plusieurs livres, comment faire ?

    Merci

    -
    Edité par jeandubois35 13 novembre 2019 à 21:14:14

    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2019 à 23:11:05

      Bonjour,

      Il faut créer une troisième table de relation qui contiendra idlivre et idlecteur.

      • 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 novembre 2019 à 21:34:39

        Bonjour,

        Merci.

        Et donc si cette troisième table contient les doublons ce n'est pas considéré comme mauvaise pratique ?

        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2019 à 9:33:25

          La clé primaire de la table de relation sera composée sur les deux colonnes (idLivre et idLecteur). Elle ne pourra donc pas contenir de doublon. Si tu tentes d'insérer une couple lecteur/livre déjà enregistré tu auras une erreur de type "Duplicate entry" empêchant l'insertion.

          C'est le principe des tables de relations.

          • livre ( id_livre [pk], titre, date_parution, resume )
          • lecteur ( id_lecteur [pk], nom, prenom, date_naissance )
          • livre_lecteur ( id_livre [pk][fk], id_lecteur [pk][fk], date_lecture )

          Côté SQL :

          CREATE TABLE livre (
          	id_livre INT UNSIGNED NOT NULL,
          	titre VARCHAR(60) NOT NULL,
          	date_parution DATE,
          	resume TEXT,
          	PRIMARY KEY ( id_livre )
          ) Engine=InnoDB;
          
          CREATE TABLE lecteur (
          	id_lecteur INT UNSIGNED NOT NULL,
          	nom VARCHAR(60) NOT NULL,
          	prenom VARCHAR(60) NOT NULL,
          	date_naissance DATE,
          	PRIMARY KEY ( id_lecteur )
          ) Engine=InnoDB;
          
          CREATE TABLE livre_lecteur (
          	id_livre INT UNSIGNED NOT NULL,
          	id_lecteur  INT UNSIGNED NOT NULL,
          	date_lecture DATE,
          	PRIMARY KEY ( id_livre, id_lecteur ),
          	CONSTRAINT fk_livre FOREIGN KEY ( id_livre ) REFERENCES livre ( id_livre ),
          	CONSTRAINT fk_lecteur FOREIGN KEY ( id_lecteur ) REFERENCES lecteur ( id_lecteur ),
          ) Engine=InnoDB;

          Une petite lecture du document "Conception BDD" (cf. ma signature) te seras d'une grande utilité ;)

          -
          Edité par Benzouye 15 novembre 2019 à 9:34:12

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            15 novembre 2019 à 19:29:28

            Un grand merci pour ces précisions !

            Je prendrai le temps de lire les documentations :)

            • Partager sur Facebook
            • Partager sur Twitter

            Relation SQL

            × 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