IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Comment créer une association entre des tuples d'une même table ?


Sujet :

Schéma

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment créer une association entre des tuples d'une même table ?
    Bonjour je cherche a faire une chose très simple.
    j'ai une table "Produits" dans une base.
    J'aimerais savoir comment je dois m y prendre pour concevoir une association des produits entre eux.
    Par exemple le produit : "cartouche d'encre RDF32" peut etre associé a un ou plusieurs produits tel que "imprimantes D750" et "imprimante D751".
    Dois je pour cela concevoir une table "association" qui pour chaque produit associe un autre produit?
    Mais par conséquent peut il y avoir une jointure entre ses deux tables?
    J'ai l impression qu on ne peut avoir que des requetes indépendante sur la table association.
    Par conséquent si je veux afficher toutes les information sur un produit et montrer les produits associés a celui ci, il faudrait que je fasse une requete sur ma table produit puis une requete sur la table "association".

    j'ai dans l'idée de créer un table "association" ayant comme clé primaire l'association de deux clés étrangere, Id_prod1 et Id_prod2 .

    Merci de bien vouloir m éclairer.
    Cordialement

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Ce serait bien de lire les règles du forum


    Elles demandent par exemple de détailler la(les) table(s), de quel SGBD il s'agit, etc....
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2011
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Avec la description du problème que tu fournis, pour moi, la solution à ton problème est de créer une seule table "PRODUITS" qui contiendrait tous tes produits (cartouches et imprimantes) et de créer une association à deux entrée reliées sur la même table "PRODUITS" qui te permettrit de faire le lien entre tes imprimantes et tes cartouches.

    Bon courage pour la suite.

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Citation Envoyé par souille Voir le message
    Dois je pour cela concevoir une table "association" qui pour chaque produit associe un autre produit?
    Oui.

    Création des tables :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE PRODUIT
    (
            ProduitId         INT         NOT NULL
          , ProduitNom        VARCHAR(48) NOT NULL
        , PRIMARY KEY (ProduitId)
    ) ;
    CREATE TABLE NOMENCLATURE
    (
            Produit1Id         INT         NOT NULL
          , Produit2Id         INT         NOT NULL
        , PRIMARY KEY (Produit1Id, Produit2Id)
        , FOREIGN KEY (Produit1Id)  REFERENCES PRODUIT (ProduitId) 
        , FOREIGN KEY (Produit2Id)  REFERENCES PRODUIT (ProduitId) 
    ) ;

    Alimentation des tables :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    INSERT INTO PRODUIT VALUES (1, 'Imprimante xy') ;
    INSERT INTO PRODUIT VALUES (2, 'Encre truc') ;
    INSERT INTO PRODUIT VALUES (3, 'Papier machin') ;
    INSERT INTO PRODUIT VALUES (4, 'Imprimante abc') ;
    INSERT INTO PRODUIT VALUES (5, 'Ordinateur truc') ;
     
    INSERT INTO NOMENCLATURE VALUES (1, 2) ;
    INSERT INTO NOMENCLATURE VALUES (1, 3) ;
    INSERT INTO NOMENCLATURE VALUES (5, 1) ;
    INSERT INTO NOMENCLATURE VALUES (4, 3) ;

    Citation Envoyé par souille Voir le message
    Mais par conséquent peut il y avoir une jointure entre ses deux tables?
    Oui.


    Par conséquent si je veux afficher toutes les information sur un produit et montrer les produits associés a celui ci, il faudrait que je fasse une requete sur ma table produit puis une requete sur la table "association".

    Non.

    Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT x.ProduitNom AS Produit, z.ProduitNom AS Composant
    FROM   PRODUIT AS x JOIN NOMENCLATURE AS y
                   ON x.ProduitId = y.Produit1Id
                        JOIN PRODUIT AS z
                   ON z.ProduitId = y.Produit2Id ;
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Produit           Composant
    ----------------  --------------
    Imprimante xy     Encre truc
    Imprimante xy     Papier machin
    Imprimante abc    Papier machin
    Ordinateur truc   Imprimante xy
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    Ce serait bien de lire les règles du forum
    Oui.

    Citation Envoyé par dehorter olivier Voir le message
    Elles demandent par exemple de détailler la(les) table(s), de quel SGBD il s'agit, etc....
    C'est vrai, mais la question posée par souille est très générale, c’est une « métaquestion », indépendante des tables en jeu et du SGBD, donc fournir ces éléments n’est en la circonstance d’aucune utilité.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Le bonhomme NULL
    Citation Envoyé par julien_33 Voir le message
    pour moi, la solution à ton problème est de créer une seule table "PRODUITS" qui contiendrait tous tes produits (cartouches et imprimantes)
    Oui.
    Citation Envoyé par julien_33 Voir le message
    créer une association à deux entrée reliées sur la même table "PRODUITS" qui te permettrait de faire le lien entre tes imprimantes et tes cartouches.
    L’auto-référence est à proscrire car génératrice de facto de NULL.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2014, 18h14
  2. Réponses: 6
    Dernier message: 17/11/2011, 10h42
  3. Réponses: 3
    Dernier message: 30/09/2009, 14h15
  4. Comment passer une information entre des threads ?
    Par TheCaribouX dans le forum C#
    Réponses: 10
    Dernier message: 31/03/2008, 14h29
  5. Réponses: 6
    Dernier message: 14/12/2006, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo