1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2008
    Messages : 16
    Points : 15
    Points
    15

    Par défaut Simple question sur une table SQL

    Bonjour les gens,

    Je suis sur un petit projet dans lequel je dois faire la liaison entre la table product et category. Pour cela j'ai donc crée une 3ème table qui associe pour chaque produit une catégorie, en utilisant les clés étrangères.

    Seulement, un produit peut avoir plusieurs catégories, la question que je me pose donc : est-ce que dans ma 3ème table, je crée une entrée = une seule association; quitte à avoir de la redondance. Ou bien je peux faire pour tel produit (donc une entrée) j'ai telle et telle catégories.

    TL;DR
    Dans une base de données

    Mieux vaut-il faire ceci
    id_product category
    01234 matériel, fourniture de bureau, papier

    Ou ceci :
    id_product category
    01234 matériel
    01234 fourniture de bureau
    01234 papier

    Merci de votre aide

  2. #2
    Membre expérimenté Avatar de vttman
    Homme Profil pro
    Développeur COBOL et le WE (CSS, PHP, JS et MYSQL)
    Inscrit en
    décembre 2002
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur COBOL et le WE (CSS, PHP, JS et MYSQL)
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2002
    Messages : 711
    Points : 1 334
    Points
    1 334

    Par défaut

    Ceci c'est déjà bien mieux !
    =>
    id_product category
    01234 matériel
    01234 fourniture de bureau
    01234 papier
    car si je recherche tous les articles avec "fourniture de bureau" uniquement ?
    et si un jour papier devient "papier glacé" etc ...

    Bref idéalement ... je partirais sur ceci
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Table product
    id_product    
    01234    
    01236
    01238
    ...
    
    Table liaison_product_category
    id_product     id_category
    01234     1
    01234     2
    01234     3
    01238     4
    ...
    
    Table category
    id_category category
    1 matériel
    2 fourniture de bureau
    3 papier
    4 scotch
    ...
    Je suis sympa comme tout Mosellan mais ...
    ... (m')aider ou (me) mettre sur la voie c'est une chose
    ... tout (me) faire de A à Z, c'est pas ma conception du rôle d'un forum X ou Y
    Si vous n'êtes pas satisfait de mes réponses, n'hésitez pas à me le faire savoir Merci !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2008
    Messages : 16
    Points : 15
    Points
    15

    Par défaut

    C'était pour que ça soit plus compréhensible, mais effectivement dans cette 3ème table j'utiliserai les id des éléments respectifs

    Merci de ta réponse, il y a plus qu'à appliquer maintenant

  4. #4
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 919
    Points : 8 589
    Points
    8 589

    Par défaut

    Salut Hypérion.

    Citation Envoyé par Hypérion
    je dois faire la liaison entre la table product et category.
    Donc vous avez deux tables mères "product" et "category".

    Citation Envoyé par Hypérion
    Pour cela j'ai donc crée une 3ème table qui associe pour chaque produit une catégorie, en utilisant les clés étrangères.
    Votre troisième table est une table fille ayant comme parent vos deux tables précédentes.
    Cette troisième table est une table associative et va réaliser le produit cartésien partielle entre la table "product" et la table "category".

    Citation Envoyé par Hypérion
    Seulement, un produit peut avoir plusieurs catégories
    Oui, d'accord, mais avec cette organisation, vous avez aussi : "une categorie peut avoir plusieurs produit".

    Fonctionnellement parlant, est-ce que cette nouvelle condition est valable ?
    Si la réponse est OUI alors vous avez bien fait de créer une troisième table dite associative.

    Si la réponse est NON, vous n'avez pas besoin de cette troisième table. Comment faire ?
    Il suffit de mettre une clef étrangère dans la table "catégorie" qui va pointer sur la clef primaire de la table "product".

    Et cela va répondre à votre deuxième exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_product	category
    01234	matériel
    01234	fourniture de bureau
    01234	papier
    Cette façon de faire se nomme une organisation hiérarchique.
    Pour 1 produit donné, vous avez de 0 à N catégories.
    Et 1 catégorie appartient à 1 produit.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 333
    Points : 40 140
    Points
    40 140
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Hyperyon Voir le message
    ceci
    id_product category
    01234 matériel, fourniture de bureau, papier
    C'est une erreur majeur par viol de la première forme normale (atomicité des données... Lisez cela sur Wikipedia, j'ai refait l'article il y a quelques années :
    https://fr.wikipedia.org/wiki/Forme_..._forme_normale

    Or le viol de la 1FN interdit toutes les autres.

    Autrement dit ce que vous faites c'est pas une base de données, mais c'est un traitement de texte ! Dans ce cas, utilisez Word, ça ira plus vite !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MLD] Question sur une table associative
    Par stargatejojo dans le forum Schéma
    Réponses: 9
    Dernier message: 15/10/2009, 17h57
  2. Simple question sur une requette
    Par alexkid999 dans le forum SQL
    Réponses: 2
    Dernier message: 07/11/2007, 09h57
  3. Historisation des modifications effectuées sur une table SQL
    Par Drooxy dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 18/10/2007, 14h29
  4. Select via un dblink sur une table sql server
    Par Cathy dans le forum SQL
    Réponses: 11
    Dernier message: 06/08/2007, 20h10
  5. Pooling sur une table SQL
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/11/2004, 00h10

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