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 :

Multiples catégories de produits


Sujet :

Schéma

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Multiples catégories de produits
    Bonjour à tous,

    Dans le cadre d'un stage je dois créer une base données pour un traiteur en ligne, malheureusement mon expérience sur les bases de données est plus que réduite

    J'ai eu des cours assez simples sur le MCD et le MPD, pas de notions d'héritage ni de trucs compliqués, bref le minimum. Alors maintenant je galère un peu...

    Donc pour ce MCD j'ai une table 'PRODUITS' qui contient le stock actuel du dit produit et son libellé (juste le nom, la description du produit se fait ailleurs). Mais ce produit peut être de nature différente (et donc traité de façon différente par la suite). Pour renseigner son état j'ai donc sous-divisé ma table 'PRODUITS' vers des tables de catégories qui sont : 'BOISSONS', 'INGREDIENTS', 'PLATS', 'MATERIELS', 'VINS' (je sais que 'vins' devrait être dans 'boissons', mais il y a trop de références, on ne pourrait pas s'y retrouver ensuite).



    Même si ça fait beaucoup de tables j'étais plutôt content de moi, malheureusement quand je passe au MPD ça ne fonctionne pas du tout comme je l'aurais souhaité. Je me retrouve avec une FK par sous-catégorie dans ma table 'PRODUITS' ce qui ne peut pas fonctionner correctement.



    Je voulais donc savoir si quelqu'un avait une idée (à part bidouiller les cardinalités pour que enlever les FK de ma table 'produits' ) ? Quitte a remodeler entièrement mon MCD, je préfère le refaire pour qu'il soit conforme par la suite.

    Si vous voulez jeter un coup d'oeil au MCD complet pour avoir une vue d'ensemble, voici un lien pour télécharger le zip :
    MCD Complet (Line 1 de la partie "Le MCD complet" )

    Je pourrais très bien regrouper toutes mes catégories dans ma table 'PRODUITS' grâce au système des 'id_parent' et 'id_fils' (voir explication ci-dessous) mais si c'était possible j'aimerais bien bien garder un table par catégorie.

    Le système des 'id_parent' et des 'id_fils' est simples et pratique mais je ne suis pas sur qu'il soit très conforme à l'esprit BDD. Je m'explique:

    'id_parent' est une référence à la catégorie supérieure du produit en question, et 'id_fils' est la référence est la sous-catégorie inférieure. Par exemple pour la table 'INGREDIENTS' cela donne:



    C'est pratique pour le classement, pour les requêtes c'est assez simple d'avoir l'arborescence pour un produit donné. Seulement avec cette technique dans une table sensée ne contenir que des produits je me retrouve avec de catégories et des sous-catégories, bref des choses immatérielles que mon patron serait bien en peine de servir à la table d'un client.

    Est-ce que pour vous cette technique est choquante? Si oui j'ai un soucis, vu que je pensais en cas de non-résolution de mon problème de MPD fusionner toutes les tables de catégories avec la table 'PRODUITS' qui du coup ne poserait plus de problème de cardinalités mais qui contiendrait un nom impressionnant de catégories, de sous-catégories, de sous-sous-catégories, etc...

    Bref elle deviendrait illisible pour l'oeil humain.

    Quand pensez vous? Quelle solution adopteriez-vous?

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    J'ai changé les liens, les images s'affichent correctement maintenant. Merci de m'avoir prévenu .

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Donc après modification... je me retrouve avec le même soucis. Je n'ai fait que déplacer le problème en fait, cela n'a servi à rien. Je dois avoir un défaut de conception, une chose que je n'ai pas compris.

    Voilà le résultat après modification de mon MCD :


    et le résultat identique sur mon MPD:


    Si vous voyez ce qui cloche dans la conception de ma modélisation je serais heureux de vous entendre, parce que là je craque.

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    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 : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Une remarque préliminaire :

    Citation Envoyé par BLJ.CHAUVIN Voir le message
    ...pour ce MCD j'ai une table 'PRODUITS'
    Le concept de table relève de SQL. Le MCD (disons merisien) relève du niveau conceptuel, et le concept correspondant est l’entité-type (ou type d’entité, ou individu-type, ou type d’individu, selon les chapelles).

    Votre phrase est à reformuler ainsi :
    ...pour ce MCD j'ai une entité-type PRODUIT.
    Notez que PRODUIT n’est pas une valeur mais le nom d’une entité-type, donc on supprime les guillemets et autres apostrophes. En outre, le nom d’une entité-type s’écrit au singulier, car elle est l’abstraction d’une entité concrète telle que l’œuf mayonnaise ou le prince des mers en sa nage (la sardine à l’huile si vous préférez). Ceux qui ont théorisé sur Merise procèdent ainsi (Tardieu, Nanci, Tabourier, etc.)


    Citation Envoyé par BLJ.CHAUVIN Voir le message
    Je voulais donc savoir si quelqu'un avait une idée (à part bidouiller les cardinalités pour que enlever les FK de ma table 'produits' ) ?
    Prenons l’exemple des entités-types PRODUIT et PLAT :



    Pour l’AGL, PRODUIT et PLAT sont des entités-types que vous mettez en relation, au même titre qu’on met en relation des fournisseurs et des produits. A chaque fois qu’il détecte une cardinalité maximum 1, l’AGL applique consciencieusement ce qui est écrit dans tous les ouvrages sur Merise : il génère une clé étrangère au niveau logique. Comme on a deux fois la situation, vous avez donc une clé étrangère de part et d’autre, ce qui graphiquement est représenté par un cycle au niveau MLD :



    Pour éviter de bidouiller, vous avez plusieurs possibilités.

    1re possibilité :

    Utilisez la représentation Entité/Relation, ou mieux, un mix Merise et Entité/Relation :



    Supprimez l’attribut Id_Plat de l’entité-type PLAT.

    Établissez la relation entre les deux entités-types, après avoir cliqué sur l’icône Relation dans la barre des symboles d'objets.

    Puis, dans la fenêtre Propriétés de la relation, onglet Détails, choisissez le rôle dominant PRODUIT -> PLAT, et cochez la case Dépendant (l’identifiant Id_Prod devient implicitement identifiant de l’entité-type PLAT).



    Au niveau MCD, cela donne :



    Au résultat, vous devez obtenir ceci lors de la dérivation du MCD en MLD :



    En notant que Id_Prod participe à la fois à la clé primaire de la table PLAT et à la clé étrangère établie entre les deux tables. Le cycle a disparu, car l’AGL a compris que PRODUIT joue le rôle de dominant, que les deux entités-types ne sont pas sur un pied d’égalité.

    2e possibilité :

    Utilisez les liens d’héritage.

    Considérons que l’entité-type PRODUIT est une généralisation des entités-types BOISSON, INGREDIENT, PLAT, VIN, c'est-à-dire qu’elle regroupe les propriétés communes à ces dernières (Lib_x, Def_x, Id_Parent_x, Id_Fils_x), lesquelles constituent des entités-types spécialisées (qu’on appelle encore sous-types) et conservent leurs attributs propres. Je vais supposer que Lib_Prod fait double emploi avec les libellés des entités-types spécialisées (sinon il faudra définir un attribut supplémentaire).



    On pourra discuter de l’absence d’attributs spécifiques dans les entités-types autres que VIN (ça inspire la mise en oeuvre d'un attribut Type de Produit...)

    Notez les options concernant les propriétés de l’héritage :



    MLD correspondant :




    3e possibilité :

    Utilisation d'un type de produit et d'une d’une association-type réflexive, laquelle vous permet de réparer la faute que vous avez commise en ayant défini des attributs IdParent_x et Id_Fils_x, mais il se fait tard et l’on verra cela ultérieurement.
    (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. Affichage Tableau Catégories et Produits
    Par rogers75017 dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2013, 12h08
  2. [Magento] Listing en grille des catégories de produits
    Par bebedemon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 22/11/2011, 21h48
  3. Réponses: 2
    Dernier message: 12/12/2010, 19h58
  4. Relation catégorie et produit
    Par LhIaScZkTer dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 26/01/2009, 13h48

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