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

MySQL Discussion :

Simple question sur une table SQL


Sujet :

MySQL

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 17
    Points : 18
    Points
    18
    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 émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    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
    ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 17
    Points : 18
    Points
    18
    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 sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 6 381
    Points : 19 066
    Points
    19 066
    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 bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    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...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ 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, 16h57
  2. Simple question sur une requette
    Par alexkid999 dans le forum SQL
    Réponses: 2
    Dernier message: 07/11/2007, 08h57
  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, 13h29
  4. Select via un dblink sur une table sql server
    Par Cathy dans le forum SQL
    Réponses: 11
    Dernier message: 06/08/2007, 19h10
  5. Pooling sur une table SQL
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 5
    Dernier message: 04/11/2004, 23h10

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