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

Requêtes MySQL Discussion :

Difficulté à la conception de tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Par défaut Difficulté à la conception de tables
    Bonjour,

    Je suis en train de concevoir un nouveau site web.
    Et j'essaye de mettre autant de critère que je veux sur un produit pour ensuite lors de l'affichage que le client puisse trier comme il le souhaite.
    Actuellement j'ai deux tables et un champs ID lié à la table "produit"
    Mais cette table est spéficique au critère "collection", et j'en ai une autre spécifique à "matière".
    Ce qui me semble totalement obsolète.

    Maintenant j'aimerais rajouter autant de critère que je veux à un produit sans faire de nouvelles tables, ou ajouter un champs à ma table "produit".
    Et c'est là que je pose ma question comment faire ?
    J'arrete pas d'y réfléchir mais je ne trouve pas la meilleure construction possible.

    Je pensais à ça :
    Table "options"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID (int) 11 auto_increment,
    Name (varchar) 64,
    Language (int) 11
    Name qui vaudra par exemple : collection, matière, avec tiroirs, sans tiroirs, etc.

    Table "options_to_products"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID (int) 11 auto_increment [lié à l'ID options]
    products_id (int) 11 (lié à ma table produits)
    language (int) 11
    options_name (varchar) 128
    options_image (varchar) 64 [Pour illustrer au cas ou]
    Options name qui vaudra : collection cookie, matière teck, 2 tiroirs, sans tiroirs, etc. etc.

    J'aimerais dans la conception ne pas ajouter de nouveaux champs à ma table produits pour lier les options.
    J'ai un champ language qui correspond à la langue et un champ products_id lié au produit donc.

    Si vous pouviez me donner vos avis, ça serait apprécier, je patauge un peu à vrai dire.
    Après pour le code, je me débrouillerai.

    Cordialement

  2. #2
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    Si ça peut te donner des idées, voila comment je gererai ce lien ( si toutefois j'ai bien compris ta question) :

    Si je comprend bien, tu veux rajouter autants de criteres que tu veux à un produits. Ce que je ferai, c'est rajouter une table de lien qui contiendrai l'id_produit et l'id_critere .

    est ce que ce que je te propose est faisable avec ton shéma ?


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Par défaut
    est ce que ce que je te propose est faisable avec ton shéma ?
    Largement.

    Mais ça voudrait dire qu'il me faudrait trois tables à ce moment là ?
    Parce qu'on soit d'accord (c'est vrai que je suis pas clair mais c'est difficile de l'expliquer simplement), il me faut le nom du critère et sa valeur.
    le nom dans une table et la valeur dans une autre.
    Faut que se soit totalement indépendant.

    Donc mettre l'ID produit dans la table "options_to_products" c'est pas plus simple ?
    Sinon je vais me retrouver à devoir appeller X tables pour me retourner les résultats.

  4. #4
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    ta solution fonctionnera tres bien je pense.
    c'est toi qui sais les requêtes que tu as a faire donc tu dois savoir sur quels champs porteront tes requêtes.

    Ma solution est peut être plus generaliste car en faisant trois tables tu peux savoir qui est rattaché à quoi rien qu'en regardant la table de lien.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Par défaut
    Non, mais en réalité tu as raison.
    Parce que avec cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ID (int) 11 AUTO_INCREMENT
    products_id (int) 11
    language (int) 11
    options_name (varchar) 128
    options_image (varchar) 64
    Je vais surement finir par avoir des doublons dans ma table.
    C'est plus logique d'avoir une autre table de liaison donc.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 27
    Par défaut
    Alors je montre le code au final que j'ai :
    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
     
    CREATE TABLE `options` (
      `options_id` int(11) NOT NULL auto_increment,
      `options_name` varchar(64) NOT NULL,
      `language_id` int(11) NOT NULL default '1',
      PRIMARY KEY  (`options_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
     
    CREATE TABLE `options_values` (
      `values_id` int(11) NOT NULL auto_increment,
      `options_id` int(11) NOT NULL,
      `values_name` varchar(64) NOT NULL,
      `language_id` int(11) default '1',
      PRIMARY KEY  (`values_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
     
    CREATE TABLE `options_to_products` (
      `products_id` int(11) NOT NULL default '0',
      `values_id` int(11) NOT NULL default '0',
      PRIMARY KEY  (`products_id`,`values_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    J'arrive à correctement retourner la valeur et le nom de l'option quand je suis sur ma fiche produit.

    Par contre, c'est là que ça se complique, au niveau du listing produit c'est la cata !
    Impossible de récupérer correctement les données et de faire un tri dynamique en suite. C'est trop chaud !

    Mon listing produit s'affiche correctemement.
    Mais je voudrais afficher correctement les options de tri et si possible avec un test pour voir si les produits dans la liste appartiennent bien à ce tri.

    Vous feriez comment vous ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/05/2006, 14h21
  2. [conception] relations tables appliquée à l'archéologie
    Par Leehan dans le forum Modélisation
    Réponses: 8
    Dernier message: 08/11/2005, 20h10
  3. [Conception] gestion tables temporaires bd ?
    Par Pwill dans le forum Général Java
    Réponses: 12
    Dernier message: 08/07/2005, 14h49
  4. Un peu de philo - conception de tables pr gestion de prêts
    Par mariobedard dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/02/2005, 22h26
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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