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 :

Gestion de stock


Sujet :

Schéma

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Gestion de stock
    Bonjour,

    N'ayant pas trouvé mon bonheur dans le forum je me permets de poster une nouvelle discussion.
    Je suis en train de mettre en place un site ecommerce et dans ce cadre je dois faire une gestion de stock.
    Jusque la pas trop compliqué sauf que ca se complique un peu car les produits vendus sur le site viennent complexifier la gestion des stocks.

    Je m'explique sur ce site sera vendu de vêtements, du mobilier, des chaussures, donc si je prends l'exemple des vêtements, un tshirt A par exemple disponible en deux tailles M, L et en deux couleurs bleu vert le stock devra fonctionner comme suit :
    TSHIRT A M BLEU : 10 unités
    TSHIRT A M VERT : 3 unités
    TSHIRT A L BLEU : 6 unités
    TSHIRT A L VERT : 8 unités

    Sauf que pour le mobilier on aura des attributs différents (variables en plus selon le type de mobilier chaise, armoire, table, etc)

    donc j'ai une table produits ou je stocke mes infos de base (libelle, prix, etc), une table attributs (M, L, BLEU, etc) une table groupe_attributs (couleur, taille) pour regrouper mes attributs et pouvoir faire des filtres en frontoffice

    Pour ma gestion de stocks j'ai une table a part dans laquelle je stocke l'identifiant du produit, et (initialement je n'avais que deux attributs possible) l'identifiant de l'attribut 1 et l'identifiant de l'attribut 2 et ma quantité et l'identifiant du fournisseur qui me vend le produit (cette table me permet d'avoir également un historique des achats fournisseurs)

    pour connaitre mon stock je compte le nombre de produits vendu (en tenant compte des attributs) je compte le nombre en stock et je fais une soustraction pour connaitre mon stock

    Sauf que maintenant le nombre d'attributs n'étant plus fixe je galère un peu pour modéliser tout ça proprement et prévoir l'évolution du système

    Au départ je comptais rajouter des colonnes attribut dans la table stock mais je risque detre bloqué le jour ou j'ai besoin de plus d'attributs et cette solution ne me semble pas la plus propre

    je pense ne pas être le seul a avoir eu ce problème et jsp qu'une ame charitable me sortira un peu de la galère

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour Guizmow34,

    A mon avis, il manque un niveau de définition de produit. On ne peut pas associer directement une occurrence du produit (TSHIRT A) à ses valeurs d'attribut (Bleu, Vert, L, M) car, dans ce cas, il est impossible de déterminer les associations de caractéristiques du produit. C'est-à-dire que, par exemple, on ne pourrait pas obtenir la liste :

    T-Shirt A M Bleu
    T-Shirt A M Vert
    T-Shirt A L Bleu
    T-Shirt A L Vert

    Pour chacune de ces combinaisons, il faut une référence de produit :

    Ref1 T-Shirt A M Bleu
    Ref2 T-Shirt A M Vert
    Ref3 T-Shirt A L Bleu
    Ref4 T-Shirt A L Vert

    Pour constituer la référence, il y a deux manières de procéder. Soit, on choisit un identifiant absolu (1), soit on choisit d'identifier les références relativement au produit dont elles dépendent (2) :

    MCD
    (1) [ Référence ]--1,1----( )----0,n->[ Produit ]

    (2) [ Référence ]-(1,1)---( )----0,n->[ Produit ]


    MLD (clés soulignées)
    (1) Référence(id_réf, ..., id_prd#)

    (2) Référence(id_prd#, no_réf, ...)


    Exemple
    Produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id_prd li_prd
    ------ -----------
    P1     T-Shirt A
    P2     Table basse
    Référence (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id_réf ... id_prd
    ------ --- ------
    1      ... P1     <- T-Shirt A M Bleu
    2      ... P1     <- T-Shirt A M Vert
    3      ... P1     <- T-Shirt A L Bleu
    4      ... P1     <- T-Shirt A L Vert
    5      ... P2     <- Table basse Noir 40cm
    6      ... P2     <- Table basse Noir 50cm
    7      ... P2     <- Table basse Blanc 40cm
    8      ... P2     <- Table basse Blanc 50cm
    Référence (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id_prd no_réf ...
    ------ ------ ---
    P1     1          <- T-Shirt A M Bleu
    P1     2          <- T-Shirt A M Vert
    P1     3          <- T-Shirt A L Bleu
    P1     4          <- T-Shirt A L Vert
    P2     1          <- Table basse Noir 40cm
    P2     2          <- Table basse Noir 50cm
    P2     3          <- Table basse Blanc 40cm
    P2     4          <- Table basse Blanc 50cm

    Il est certain que l'identification relative (2) est bien meilleure pour modéliser ce type de problèmes notamment pour les performances de la base de données.


    Ceci étant défini, il n'y a plus qu'à associer les bonnes valeurs d'attributs à chaque référence. Pour cela, on associe les entités Référence et Attribut.

    [ Référence ]--0,n---( Caractéristique )----0,n--[ Attribut ]


    Les attributs sont répartis en groupes donc l'entité Attribut doit être identifiée par rapport à l'entité Groupe. Dans les couleurs (groupe) on va trouver Bleu, Vert, Noir, Blanc, etc., idem pour les tailles et les hauteurs :

    [ Attribut ]-(1,1)---( )----0,n->[ Groupe ]

    Groupe(id_grp, li_grp, ...)
    Attribut(id_grp#, no_att, li_att, ...)

    Groupe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_grp li_grp
    ------ -----------
    Co     Couleur
    Ta     Taille
    Ht     Hauteur
    Attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id_grp no_att li_att
    ------ ------ ------
    Co     1      Bleu
    Co     2      Vert
    Co     3      Noir
    Co     4      Blanc
    Ta     1      M
    Ta     2      L
    Ht     1      30cm
    Ht     2      40cm
    Par conséquent, la table issue de l'association Caractéristique se présente comme ceci :

    Caractéristique(id_prd, no_réf, id_grp, no_att, ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    id_prd no_ref id_grp no_att
    ------ ------ ------ ------
    P1     1      Co     1
    P1     1      Ta     1
    
    P1     2      Co     2
    P1     2      Ta     1
    
    P1     3      Co     1
    P1     3      Ta     2
    
    P1     4      Co     2
    P1     4      Ta     2
    La référence P1-1 a pour attributs Couleur Bleu et Taille M
    La référence P1-2 a pour attributs Couleur Vert et Taille M
    La référence P1-3 a pour attributs Couleur Bleu et Taille L
    La référence P1-4 a pour attributs Couleur Vert et Taille L



    On ne veut pas associer n'importe quel type d'attribut à un produit (donc à ses références). Par exemple, pour "T-Shirt A" on ne veut que des couleurs et des tailles. Pour "Table basse" on ne veut que des couleurs et des hauteurs, etc. Pour définir cela, il faut associer les entités Groupe et Produit.

    [ Produit ]--0,n----( Caractère )----0,n--[ Groupe ]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    id_prd id_grp
    ------ ------
    P1     Co
    P1     Ta
    P2     Co
    P2     Ht
    Lors de l'association d'un attribut et d'une référence, il faudra vérifier que cette opération est autorisée par l'association Caractère. Ceci peut se modéliser à l'aide d'une contrainte d'inclusion de Caractéristique dans Caractère.



    On n'est évidemment pas limité à deux groupes par produit. Par exemple, on pourrait ajouter un groupe "longueur de manche" (manches longues / manches courtes) aux caractères du "T-Shirt A".
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Pourquoi pas un logiciel de gestion de stock ?
    Je te recommande de te servir d'un logiciel de gestion de stocks dans lequel tu entreras tes différentes références produits puis tes ventes et de là découlera ton inventaire.

    Ce sera bien plus simple à gérer que sur un tableur selon moi.
    Réflèchis à cette idée et si tu penses que ça peut t'intéresser, je te suggère d'aller tester TioLive. (il gère entre autres l'inventaire)

  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
    Citation Envoyé par FrançoisXx Voir le message
    Je te recommande de te servir d'un logiciel de gestion de stocks
    Ça n'est pas la meilleure façon d'apprendre à modéliser. Ici on fait dans la technique, pas dans le marketing.

    Par ailleurs vous parlez de tableur : vous n'êtes pas dans le bon forum.
    (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
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    des gros mercis a Guizmow34 d'avoir crée ce sujet tres interessant et a JPhi33 d'avoir proposé une bonne solution!

    je suis justelent entrain de penser a une base exactement similaire a celle de Guizmow34. j'ai lu ce sujet et me pose quelques petites questions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    id_prd no_réf ...
    ------ ------ ---
    P1     1          <- T-Shirt A M Bleu
    P1     2          <- T-Shirt A M Vert
    P1     3          <- T-Shirt A L Bleu
    P1     4          <- T-Shirt A L Vert
    P2     1          <- Table basse Noir 40cm
    P2     2          <- Table basse Noir 50cm
    P2     3          <- Table basse Blanc 40cm
    P2     4          <- Table basse Blanc 50cm
    le champ np_ref ne devrait il pas etre en autoincrement ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    id_grp no_att li_att
    ------ ------ ------
    Co     1      Bleu
    Co     2      Vert
    Co     3      Noir
    Co     4      Blanc
    Ta     1      M
    Ta     2      L
    Ht     1      30cm
    Ht     2      40cm
    concernant les couleurs ca ne pose pas de problem, les tailles (XS, S, M, M, ...) non plus, mais faut il en creer toutes les pointures de chaussures??? et la hauteur par exemple, faut il creer une ligne pour 30cm, 32cm, 33cm, ... ??

    Merci beaucoup

  6. #6
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour redah75,

    Citation Envoyé par redah75 Voir le message
    le champ np_ref ne devrait il pas etre en autoincrement ??
    no_ref pourrait être auto-incrémenté, ça ne changerait rien à l'implémentation du concept d'identification relative. En fait, dans l'exemple de valeurs Référence (2), no_ref est auto-incrémenté pour chaque produit : quand on change de produit, la numérotation recommence à 1.

    Citation Envoyé par redah75 Voir le message
    faut il créer toutes les pointures de chaussures??? et la hauteur par exemple, faut il créer une ligne pour 30cm, 32cm, 33cm, ... ??
    Oui
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Merci JPhi33 d'avoir repondu,

    no_ref pourrait être auto-incrémenté, ça ne changerait rien à l'implémentation du concept d'identification relative. En fait, dans l'exemple de valeurs Référence (2), no_ref est auto-incrémenté pour chaque produit : quand on change de produit, la numérotation recommence à 1.
    Oui, c'est ce que j'ai remarqué, mais je me suis dit que c'est peut etre plus simple de le mettre en autoincrement pour eviter de d'avord recuperer le plus grand identifiant de la gamme du produit, puis l'incrementer de 1. a moins que tu aies une autre technique plus simple et meilleure

    Oui
    Ayéyé d'accord
    je vais avancer dans mon projet et vous tiendrai au courant

    Merci encore une fois
    Reda

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Hello JPhi33,

    Ca y est, je suis entrain de mettre en place la solution que tu as proposé, je t'en remercie infiniment: simple et claire!!

    j'aurais 3 petites questions a te poser:

    1- je vois que dans la table "Groupe" tu utilises un CHAR 2 comme identifiant (Co, Ta, Ht), ne serait il pas plus interesssant et optimisé d'utiliser un INT et en AUTOINCREMENT ?? meme chose pour la table "Produit"

    2- tu es bien d'accord que le champ "prix", "quantité" et autres doivent etre ajoutés a la table "Produit Reference 2" ??

    3- concernant la gestion de quantité & disponibilité, est il mieux de:
    3.1- mettre par exemple "30" dans le champ quantité, et puis pour verifier la disponibilite je fais une requete SQL ( SELECT quantité - total produits vendus)
    3.2- mettre "30" dans le champ quantité, puis a a chaque ventre effectuer une requete sql (UPDATE quantite = quantite - 1) ??

    Merci

  9. #9
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour redah75,

    Citation Envoyé par redah75 Voir le message
    1- je vois que dans la table "Groupe" tu utilises un CHAR 2 comme identifiant (Co, Ta, Ht), ne serait il pas plus interesssant et optimisé d'utiliser un INT et en AUTOINCREMENT ?? meme chose pour la table "Produit"
    Oui, tu as parfaitement raison. J'ai la fâcheuse tendance à mettre des identifiants significatifs partout, surtout dans un souci didactique. Ceci dit, il faut relativiser, la différence de performances entre les formats CHAR(2) et INT pour l'identifiant n'est réellement perceptible qu'à partir d'un seuil élevé de groupes (quelques centaines à quelques dizaines de milliers selon la machine et le SGBD). Mais dans le principe, tu as raison.

    Citation Envoyé par redah75 Voir le message
    2- tu es bien d'accord que le champ "prix", "quantité" et autres doivent etre ajoutés a la table "Produit Reference 2" ??
    Tu parles de l'entité Produit ou de l'entité Référence ? Au passage, j'ai nommé un peu vite cette dernière entité. En général, on parle plutôt d'Article.

    Ceci dit, je peux quand même répondre : ça dépend des règles de gestion. Si tous les T-shirts sont vendus au même prix, quelles que soient leur taille et leur couleur, alors le prix doit aller dans l'entité Produit. Si un T-shirt taille XXL est plus cher qu'un de taille M, alors le prix doit aller dans l'association (donc la table) Caractéristique.

    Pour la quantité en stock, c'est plus facile. En général, savoir combien de T-shirts on a en stock, indépendamment de leur caractéristiques aide très peu au réapprovisionnement. Ce qu'on veut connaitre est plus précis : c'est le nombre de T-shirts bleus en taille M ; donc la quantité va dans l'entité Caractéristique. D'autant que par simple addition, on obtient la quantité totale de T-shirts en stock.

    Le même raisonnement est à tenir pour toutes les autres propriétés.


    Citation Envoyé par redah75 Voir le message
    3- concernant la gestion de quantité & disponibilité, est il mieux de:
    3.1- mettre par exemple "30" dans le champ quantité, et puis pour verifier la disponibilite je fais une requete SQL ( SELECT quantité - total produits vendus)
    3.2- mettre "30" dans le champ quantité, puis a a chaque ventre effectuer une requete sql (UPDATE quantite = quantite - 1) ??
    Tout dépend des besoins de gestion. Dans le cas 3.1, tu gères une quantité vendue et pas dans le cas 3.2. La gestion de stock est quelque chose de complexe. Il faut tenir compte des commandes, des expéditions, des retours, et il y a une quantité d'articles à gérer à chaque fois. Disons que le cas 3.2 est plus proche de la réalité : chaque sortie décrémente le stock (ce qui permet de gérer le réapprovisionnement).
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Tu parles de l'entité Produit ou de l'entité Référence ? Au passage, j'ai nommé un peu vite cette dernière entité. En général, on parle plutôt d'Article.
    désolé si je n'ai pas été clair!
    je parlais de l'entité "Reference". En effet, le prix peut varier selon la couleur, taille et eventuellement la matiere!! donc le prix ira bien dans la table "Reference"

    Ceci dit, je peux quand même répondre : ça dépend des règles de gestion. Si tous les T-shirts sont vendus au même prix, quelles que soient leur taille et leur couleur, alors le prix doit aller dans l'entité Produit. Si un T-shirt taille XXL est plus cher qu'un de taille M, alors le prix doit aller dans l'association (donc la table) Caractéristique.
    je ne vois pas trop pourquoi et comment on peut le mettre dans la table "caracteristique", car si je prends par exemple ces 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_prd no_ref id_grp no_att
    ------ ------ ------ ------
    P1     1      Co     1
    P1     1      Ta     1
    il s'agit bien du meme produit qui est de couleur Bleu et taille M, et comme il s'agit du meme produit, il serait plus judicieux de mettre le prix ET la quantité dans la table parente qui est "Reference", non??

    m'inspirant de ton schema, j'ai pu en creer un autre plus simple que je posterai tres prochainement pour avis
    je suis sur que tu y trouveras des failles....

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour, je suis avec beaucoup d’intérêt cette discussion depuis le début, je travaille sur un sujet similaire sauf que je dois gérer en plus les fournitures qui composent tel vêtement. (http://www.developpez.net/forums/d10...sonnalisables/)

    J'allais dire la meme chose que Redah75 ! J'ai envie de gérer les quantités dans l'entité "Référence" et de relier mon entité "Ligne commande à cette même entité.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Rebonjour et bienvenu Ponset

    voila une structure que j'ai faite, qui est tres simple et bien evidament loin d'etre parfaite

    produits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_produit	id_categorie	libelle //id_produit AUTOINCREMENT
    ---------------------------------------------
    10001	Vetements		T-Shirt magnifique
    10002	Chaussures		Belle chaussure
    10003	Deco			Table basse
    produits_references:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    id_prd	id_prd_ref	id_couleur	id_taille	id_matiere	dimensions	poids	isbn	prix	dispo //id_prd_ref AUTOINCREMENT
    ---------------------------------------------------------------------------------------------------------------------
    10001	100001		rouge		M		Cuir		NULL		35	NULL	45.00	8
    10001	100002		bleu		XS		Coton		NULL		30	NULL	38.00	12
    10001	100003		noir		S		Coton		NULL		30	NULL	42.00	16
    
    10002	100004		blanc		28		Cuir		NULL		260	NULL	65.00	6
    10002	100005		Rose		30		Daim		NULL		310	NULL	60.00	5
    
    10003	100006		rouge		Grand		Cuir		500x90x200	6500	NULL	145.00	5
    10003	100007		Chocolat	Moyen		Cuir		420x80x160	4500	NULL	125.00	6
    10003	100008		Gris		Petit		Cuir		300x60x120	3000	NULL	105.00	8
    Bien evidament, j'ai mis "noir, blanc, cuir, coton, ..." directement dans la table pour des raisons de clarté, je mettrai plutot des identifiants issus de tables references (couleurs, matieres, tailles)

    alors, mes questions sont les suivantes

    1- qu'en pensez vous?
    2- le champ "taille" me gene un petit peu car il contiendra differents types de tailles (pointure, taille...) c'est pas grave?
    3- j'aurais probablement QUELQUE livres a vendre, en vaut il le coup de mettre le champ "isbn" ??
    4- concernant la gestion des couleurs, disant qu'une paire de chaussure contient 3 couleurs, est il mieux de:
    4.1- mettre blanc/ rouge/ noir
    4.2- ou plutot creer une autre table qui contient 2 champs: l'identifiant du produit et l'identifiant de la couleur ?

    Merci bien

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par redah75 Voir le message
    Rebonjour et bienvenu Ponset

    voila une structure que j'ai faite, qui est tres simple et bien evidament loin d'etre parfaite

    produits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_produit	id_categorie	libelle //id_produit AUTOINCREMENT
    ---------------------------------------------
    10001	Vetements		T-Shirt magnifique
    10002	Chaussures		Belle chaussure
    10003	Deco			Table basse
    produits_references:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    id_prd	id_prd_ref	id_couleur	id_taille	id_matiere	dimensions	poids	isbn	prix	dispo //id_prd_ref AUTOINCREMENT
    ---------------------------------------------------------------------------------------------------------------------
    10001	100001		rouge		M		Cuir		NULL		35	NULL	45.00	8
    10001	100002		bleu		XS		Coton		NULL		30	NULL	38.00	12
    10001	100003		noir		S		Coton		NULL		30	NULL	42.00	16
    
    10002	100004		blanc		28		Cuir		NULL		260	NULL	65.00	6
    10002	100005		Rose		30		Daim		NULL		310	NULL	60.00	5
    
    10003	100006		rouge		Grand		Cuir		500x90x200	6500	NULL	145.00	5
    10003	100007		Chocolat	Moyen		Cuir		420x80x160	4500	NULL	125.00	6
    10003	100008		Gris		Petit		Cuir		300x60x120	3000	NULL	105.00	8
    Bien evidament, j'ai mis "noir, blanc, cuir, coton, ..." directement dans la table pour des raisons de clarté, je mettrai plutot des identifiants issus de tables references (couleurs, matieres, tailles)

    alors, mes questions sont les suivantes

    1- qu'en pensez vous?
    2- le champ "taille" me gene un petit peu car il contiendra differents types de tailles (pointure, taille...) c'est pas grave?
    3- j'aurais probablement QUELQUE livres a vendre, en vaut il le coup de mettre le champ "isbn" ??
    4- concernant la gestion des couleurs, disant qu'une paire de chaussure contient 3 couleurs, est il mieux de:
    4.1- mettre blanc/ rouge/ noir
    4.2- ou plutot creer une autre table qui contient 2 champs: l'identifiant du produit et l'identifiant de la couleur ?

    Merci bien
    J'ai l'impression que ce n'est pas bon... Je crois que tu as mal interprété la réponse JPhi33.

    Pour ton entité "reference" (produit_reference se serait plutôt l'association) tu ne dois avoir que des IDs d'attributs, attributs qui sont eux même organisé en "groupe".

    Je reprends l'entité "reference" de Jphi33 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id_prd no_réf ...
    ------ ------ ---
    P1     1          <- T-Shirt A M Bleu
    P1     2          <- T-Shirt A M Vert
    P1     3          <- T-Shirt A L Bleu
    P1     4          <- T-Shirt A L Vert
    P2     1          <- Table basse Noir 40cm
    P2     2          <- Table basse Noir 50cm
    P2     3          <- Table basse Blanc 40cm
    P2     4          <- Table basse Blanc 50cm
    Là par exemple un T-shirt a toujours deux attributs. Le nombre et le type d'attributs est géré par l'association faite entre l'entité "Groupe" et "Produit".

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Pour ton entité "reference" (produit_reference se serait plutôt l'association) tu ne dois avoir que des IDs d'attributs, attributs qui sont eux même organisé en "groupe".
    si j'ai bien compris ce que tu veux dire, j'ai bien precisé que je n'ai pas utilisé des IDs pour des raisons de clareté et simplicité!!
    bien evidament il y aura des tables pour les IDs d'attributs...

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par redah75 Voir le message
    si j'ai bien compris ce que tu veux dire, j'ai bien precisé que je n'ai pas utilisé des IDs pour des raisons de clareté et simplicité!!
    bien evidament il y aura des tables pour les IDs d'attributs...
    Ah d'accord, autant pour moi. Vu que tous les IDs sont sur une même ligne, j'ai cru que...

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    j'aurais une petite question qui me perturbe un peu!!
    disons par exemple une paire de chaussure qui existe en 4 couleurs et 2 matiere (cuir et daim)

    les variations "couleurs" seront dans la table "references"
    les variations "matieres" aussi dans la table "references' ou plutot dans la table "produits" ??

    sachant que j'utiliserai les URL rewriting, si je mets les "matieres" dans la table "references", j'aurais toujours une url du type site.com/ma-chaussure-1001.html et si je mets les differences "matieres" dans la table "produits", je pourrai avoir une url du type site.com/ma-chaussure-cuir-1001.html et site.com/ma-chaussure-daim-1002.html

    que me conseillez vous?

  17. #17
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonsoir à tous et joyeux Noël !

    Une petite synthèse pour commencer, dans laquelle je renomme Référence en Article pour plus de clarté :

    Le MCD
    [ Produit ]<-0,n----( )---(1,1)-[ Article ]--0,n---( Caractéristique )----0,n--[ Attribut ]-(1,1)---( )----0,n->[ Groupe ]

    Article est identifié relativement à Produit
    Attribut est identifié relativement à Groupe

    Les identifiants
    Produit : {id_prd}
    Groupe : {id_grp}
    Article : {id_prd, no_art} car identifié relativement à Produit
    Attribut : {id_grp, no_att} car identifié relativement à Groupe
    Caractéristique : {id_prd, no_art, id_grp, no_att} car association entre Article et Attribut


    Les questions de redah75
    Citation Envoyé par redah75
    1- qu'en pensez vous?
    2- le champ "taille" me gene un petit peu car il contiendra differents types de tailles (pointure, taille...) c'est pas grave?
    3- j'aurais probablement QUELQUE livres a vendre, en vaut il le coup de mettre le champ "isbn" ??
    4- concernant la gestion des couleurs, disant qu'une paire de chaussure contient 3 couleurs, est il mieux de:
    4.1- mettre blanc/ rouge/ noir
    4.2- ou plutot creer une autre table qui contient 2 champs: l'identifiant du produit et l'identifiant de la couleur ?
    Désolé mais Ponset a raison, je pense que tu n'as pas saisi le principe de cette modélisation. Tu as créé de nouveaux identifiants et propriétés (id_couleur, id_taille, id_matiere, dimensions, poids, isbn), ce qui implique forcément de nouvelles entités : Couleur, Taille, Matière, etc. Inutile d'aller plus loin pour comprendre qu'avec ce principe, à chaque nouveau type de produit, il faudrait créer de nouvelles entités. Si tu prévois de gérer des lunettes, il faudrait créer une entité Type de Monture, pour des ceintures, Fermoir, etc. Sans compter que ces entités généreraient autant de valeurs NULL que d'articles non concernés, comme on le voit déjà dans les colonnes "dimension" et "isbn" de ton exemple.

    Voici comment il faut procéder. Les colonnes "couleur", "taille", "matière", etc. de ton exemple doivent être des occurrences de l'entité Groupe et leurs valeurs, des occurrences de l'entité Attribut. Ensuite, tout se passe dans l'association Caractéristique qui permet d'associer chaque article à ses attributs. Voici ton exemple correctement replacé dans l'association (j'ai omis les identifiants pour que ce soit plus parlant) :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Produit      Article Attribut   Groupe
    ------------ ------- ---------- ----------------
    T-Shirt Magn 100001  Rouge      Couleur Vetement
    T-Shirt Magn 100001  M          Taille Vetement
    T-Shirt Magn 100001  Cuir       Matière
    
    T-Shirt Magn 100002  Bleu       Couleur Vetement
    T-Shirt Magn 100002  XS         Taille Vetement
    T-Shirt Magn 100002  Coton      Matière
    
    T-Shirt Magn 100003  Noir       Couleur Vetement
    T-Shirt Magn 100003  S          Taille Vetement
    T-Shirt Magn 100003  Coton      Matière
    
    Belle Chauss 100004  Blanc      Couleur Chaussur
    Belle Chauss 100004  28         Pointure
    Belle Chauss 100004  Cuir       Matière
    
    Belle Chauss 100005  Rose       Couleur Chaussur
    Belle Chauss 100005  30         Pointure
    Belle Chauss 100005  Daim       Matière
    
    Table basse  100006  Rouge      Couleur Mobilier
    Table basse  100006  Grand      Taille Mobilier
    Table basse  100006  Cuir       Matière
    Table basse  100006  500x90x200 Dimension
    
    Table basse  100007  Chocolat   Couleur Mobilier
    Table basse  100007  Moyen      Taille Mobilier
    Table basse  100007  Cuir       Matière
    Table basse  100007  420x80x160 Dimension
    Le T-shirt magnifique 100003 est noir, taille M en coton ; les Belles chaussures 100005 sont rose, pointure 30 en daim, etc.

    Avec cet exemple, on voit que seuls les attributs pertinents sont associés à l'article : pour une chaussure, pas de dimension ni de taille ; pour une table basse, pas de pointure, etc. On voit aussi qu'on peut créer des groupes différents pour le même type d'attribut : les couleurs de vêtements ne sont pas forcément des couleurs de chaussures même si on trouve du rouge dans les deux cas.

    Voici les entités correspondant à cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Produit
    
    id_prd libellé_prd
    ------ ------------------
    10001  T-Shirt magnifique
    10002  Belles chaussures
    10003  Table basse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Article
    
    id_prd no_art libellé_article
    ------ ------ -------------------
    10001  100001 TSM rouge taille M  <- la matière a été oubliée dans le libellé
    10001  100002 TSM bleu en coton   <- ici, c'est la taille
    10001  100003 TSM noir S (coton)  <- libellé complet
    10002  100004 Chaussures "Belles"
    10002  100005 Ch Bel Daim pt 30
    10003  100006 Table basse rouge
    10003  100007 Tab.bass choc.moyen
    (malgré les erreurs ou les approximations contenues dans les libellés, l'association Caractéristique rassemble tous les attributs, comme on l'a vu)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Groupe
    
    id_grp libellé_groupe
    ------ ----------------
    1      Couleur Vetement
    2      Couleur Chaussur
    3      Couleur Mobilier
    4      Taille Vetement
    5      Matière
    6      Pointure
    7      Dimension
    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
    Attribut
    
    id_grp no_att libellé_attribut
    ------ ------ ----------------
    1      1      Rouge
    1      2      Bleu
    1      3      Noir
    2      1      Blanc
    2      2      Rose
    3      1      Rouge
    3      2      Chocolat
    4      1      M
    4      2      XS
    4      3      S
    5      1      Cuir
    5      2      Coton
    5      3      Daim
    6      1      28
    6      2      30
    7      1      500x90x200
    7      2      420x80x160
    Voilà, j'espère que cet exemple t'aidera à mieux comprendre la modélisation.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup JPhi33 pour ta reponse bien detaillée et joyeux noel a toi aussi

    je m'appretais justement a poster un message pour te remercier pour ta toute premiere solution car g fait le tours des simulation et c'est bien ton exemple qui est correct et tu as bien raison concernant les nouvelles entités qu'il faudrait creer en cas d'ajout d'un nouveau type de produits...

    j'aimerais juste t'informer que je suis entrain de creer un site multilingue ce qui complique un peu plus la tache. j'aurais donc quelque petites questions a te poser:

    1- concernant le poids, est il mieux de le renseigner en "g" ou en "kg" sachant que j'aurais probablement besoin de l'afficher differente unité de mesure selon le pays

    2- concernant les dimensions (largeur, longueur, ...), utiliser le "cm" ou "mm" sachant que je vais peut etre devoir l'afficher en difference unités de mesure

    3- concernant le prix, me conseilles tu de mettre le prix en dur (15, 20.5) ou plutot creer une table "prix" et utiliser les identifiants??
    je pose cette question car je n'ai pas une vision du future pour la mise en place d'un système de discount et promotions...

    j'ai finallement decidé d'associer QU'UN SEUL titre au produit parent, c'est à dire que j'aurais toujours une url du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    site.com/ma-belle-chaussure-100002.html // chaussure cuir noir
    site.com/ma-belle-chaussure-100003.html // chaussure cuir rose
    site.com/ma-belle-chaussure-100004.html // chaussure daim noir
    et du coup je sacrifie le fait de mettre la couleur et la matiere dans l'url afin de simplifier le travail de traduction...

    4- penses tu que c'est une bonne idee et qu'il y aurait des repercussions par rapport au referencement naturel?

    5- concernant les poitures des chaussures et egalement les tailles de vetement, comment ferais tu toi pour pourvoir les afficher en taille US, UK??
    j'ai pensé a mettre uniquement la taille en FR, puis apres en PHP je la convertie en US ou UK si demandé par le client

    6- comment ferais tu pour mettre en place les produits de la meme famille. c'est a dire lorsqu'on est sur la fiche detaillée d'un appareil photo, je te propose d'acheter egalement une housse, batterie supplementaire, pilles, carte SD, ...

    ci-dessous la structure des tables que j'ai crées et qui sont un poil differentes de ce que tu as proposé. ca peut peut etre interessé quelqu'un. j'ai pas mis toutes les valeurs de la tables "languages", mais je peux vous la filer...

    7- qu'en penses tu?
    la table "products_ref_vars" signifie "products_references_variations" et le "_trans" pour "_translations"

    Meeeeeerci merci mille fois

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    -- phpMyAdmin SQL Dump
    -- version 3.3.8
    -- http://www.phpmyadmin.net
    --
    -- Host: localhost
    -- Generation Time: Dec 26, 2010 at 01:32 AM
    -- Server version: 5.1.48
    -- PHP Version: 5.3.3
    
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    
    --
    -- Database: `my_db`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `attributes`
    --
    
    CREATE TABLE IF NOT EXISTS `attributes` (
      `id_attr` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
      `attribute` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id_attr`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=111 ;
    
    --
    -- Dumping data for table `attributes`
    --
    
    INSERT INTO `attributes` (`id_attr`, `attribute`) VALUES
    (101, 'height'),
    (102, 'width'),
    (103, 'length'),
    (104, 'depth'),
    (105, 'diameter'),
    (106, 'thickness'),
    (107, 'weight'),
    (108, 'color'),
    (109, 'material'),
    (110, 'size_shoes');
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `attributes_values`
    --
    
    CREATE TABLE IF NOT EXISTS `attributes_values` (
      `id_attr_val` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `id_attr` tinyint(3) unsigned NOT NULL,
      `attr_val` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id_attr_val`),
      KEY `FQ-id_attr` (`id_attr`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1004 ;
    
    --
    -- Dumping data for table `attributes_values`
    --
    
    INSERT INTO `attributes_values` (`id_attr_val`, `id_attr`, `attr_val`) VALUES
    (1001, 101, '20'),
    (1002, 102, '21');
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `languages`
    --
    
    CREATE TABLE IF NOT EXISTS `languages` (
      `lang_iso` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
      `lang` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      `lang_en` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`lang_iso`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Dumping data for table `languages`
    --
    
    INSERT INTO `languages` (`lang_iso`, `lang`, `lang_en`) VALUES
    ('am', 'አማርኛ', 'Amharic'),
    ('ar', 'العربية', 'Arabic'),
    ('en', 'English', 'English'),
    ('en-gb', 'English (UK)', ''),
    ('en-us', 'English (Int.)', ''),
    ('es', 'Español', 'Spanish'),
    ('et', 'eesti keel', 'Estonian'),
    ('fa', 'فارسی', 'Persian');
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `products`
    --
    
    CREATE TABLE IF NOT EXISTS `products` (
      `id_prod` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `id_region` tinyint(3) unsigned NOT NULL,
      `active` enum('y','n') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'y',
      PRIMARY KEY (`id_prod`),
      KEY `FQ-id_region` (`id_region`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10003 ;
    
    --
    -- Dumping data for table `products`
    --
    
    INSERT INTO `products` (`id_prod`, `id_region`, `active`) VALUES
    (10001, 1, 'y'),
    (10002, 2, 'y');
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `products_references`
    --
    
    CREATE TABLE IF NOT EXISTS `products_references` (
      `id_prod` int(10) unsigned NOT NULL,
      `id_prod_ref` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `price` decimal(7,2) NOT NULL,
      `stock` tinyint(3) unsigned NOT NULL,
      `dt_add` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `dt_update` datetime DEFAULT NULL,
      `active` enum('y','n') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'y',
      PRIMARY KEY (`id_prod_ref`),
      KEY `FQ-id_prod` (`id_prod`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=100004 ;
    
    --
    -- Dumping data for table `products_references`
    --
    
    INSERT INTO `products_references` (`id_prod`, `id_prod_ref`, `price`, `stock`, `dt_add`, `dt_update`, `active`) VALUES
    (10001, 100001, 22.00, 4, '2010-12-22 23:40:33', NULL, 'y'),
    (10001, 100002, 44.00, 110, '2010-12-22 23:43:41', NULL, 'y'),
    (10002, 100003, 75.00, 9, '2010-12-24 22:07:18', NULL, 'y');
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `products_ref_vars`
    --
    
    CREATE TABLE IF NOT EXISTS `products_ref_vars` (
      `id_prod_ref` int(10) unsigned NOT NULL,
      `id_attr_val` smallint(5) unsigned NOT NULL,
      KEY `FQ-id_prod_ref` (`id_prod_ref`),
      KEY `FQ-id_attr_val` (`id_attr_val`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Dumping data for table `products_ref_vars`
    --
    
    INSERT INTO `products_ref_vars` (`id_prod_ref`, `id_attr_val`) VALUES
    (100001, 1001);
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `products_titles_trans`
    --
    
    CREATE TABLE IF NOT EXISTS `products_titles_trans` (
      `id_prod` int(10) unsigned NOT NULL,
      `lang_iso` char(2) COLLATE utf8_unicode_ci NOT NULL,
      `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
      KEY `FQ-id_prod` (`id_prod`),
      KEY `FQ-lang_iso` (`lang_iso`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Dumping data for table `products_titles_trans`
    --
    
    INSERT INTO `products_titles_trans` (`id_prod`, `lang_iso`, `title`) VALUES
    (10001, 'en', 'My beautiful shoes'),
    (10001, 'fr', 'Mes jolies chaussures'),
    (10002, 'en', 'My beautiful table'),
    (10002, 'fr', 'Ma jolie table');
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `regions`
    --
    
    CREATE TABLE IF NOT EXISTS `regions` (
      `id_region` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
      `region` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id_region`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
    
    --
    -- Dumping data for table `regions`
    --
    
    INSERT INTO `regions` (`id_region`, `region`) VALUES
    (1, 'Ouest'),
    (2, 'North');
    
    --
    -- Constraints for dumped tables
    --
    
    --
    -- Constraints for table `attributes_values`
    --
    ALTER TABLE `attributes_values`
      ADD CONSTRAINT `attributes_values_ibfk_1` FOREIGN KEY (`id_attr`) REFERENCES `attributes` (`id_attr`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    --
    -- Constraints for table `products`
    --
    ALTER TABLE `products`
      ADD CONSTRAINT `products_ibfk_1` FOREIGN KEY (`id_region`) REFERENCES `regions` (`id_region`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    --
    -- Constraints for table `products_references`
    --
    ALTER TABLE `products_references`
      ADD CONSTRAINT `products_references_ibfk_1` FOREIGN KEY (`id_prod`) REFERENCES `products` (`id_prod`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    --
    -- Constraints for table `products_ref_vars`
    --
    ALTER TABLE `products_ref_vars`
      ADD CONSTRAINT `products_ref_vars_ibfk_2` FOREIGN KEY (`id_attr_val`) REFERENCES `attributes_values` (`id_attr_val`) ON DELETE CASCADE ON UPDATE CASCADE,
      ADD CONSTRAINT `products_ref_vars_ibfk_1` FOREIGN KEY (`id_prod_ref`) REFERENCES `products_references` (`id_prod_ref`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    --
    -- Constraints for table `products_titles_trans`
    --
    ALTER TABLE `products_titles_trans`
      ADD CONSTRAINT `products_titles_trans_ibfk_1` FOREIGN KEY (`id_prod`) REFERENCES `products` (`id_prod`) ON DELETE CASCADE ON UPDATE CASCADE,
      ADD CONSTRAINT `products_titles_trans_ibfk_2` FOREIGN KEY (`lang_iso`) REFERENCES `languages` (`lang_iso`) ON DELETE CASCADE ON UPDATE CASCADE;

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par JPhi33 Voir le message
    Bonsoir à tous et joyeux Noël !

    Une petite synthèse pour commencer, dans laquelle je renomme Référence en Article pour plus de clarté :

    Le MCD
    [ Produit ]<-0,n----( )---(1,1)-[ Article ]--0,n---( Caractéristique )----0,n--[ Attribut ]-(1,1)---( )----0,n->[ Groupe ]

    Article est identifié relativement à Produit
    Attribut est identifié relativement à Groupe

    Les identifiants
    Produit : {id_prd}
    Groupe : {id_grp}
    Article : {id_prd, no_art} car identifié relativement à Produit
    Attribut : {id_grp, no_att} car identifié relativement à Groupe
    Caractéristique : {id_prd, no_art, id_grp, no_att} car association entre Article et Attribut

    ...
    Bonjour et merci, joyeux noel à tous et bon bout d'an !

    Donc si je comprends bien la relation entre [produit] et [groupe] est superflue ? Moi je l'ai laissé dans mon schéma...

    Sinon le reste est limpide !

  20. #20
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour,

    Citation Envoyé par redah75 Voir le message
    1- concernant le poids, est il mieux de le renseigner en "g" ou en "kg" sachant que j'aurais probablement besoin de l'afficher differente unité de mesure selon le pays

    2- concernant les dimensions (largeur, longueur, ...), utiliser le "cm" ou "mm" sachant que je vais peut etre devoir l'afficher en difference unités de mesure
    Je n'ai pas d'avis sur ce point, c'est vraiment spécifique. De plus, ce choix n'influe pas sur la modélisation.


    Citation Envoyé par redah75 Voir le message
    3- concernant le prix, me conseilles tu de mettre le prix en dur (15, 20.5) ou plutot creer une table "prix" et utiliser les identifiants??
    je pose cette question car je n'ai pas une vision du future pour la mise en place d'un système de discount et promotions...
    Le prix est une donnée qui varie considérablement d'une occurrence de produit (ou d'article) à l'autre et qui varie beaucoup dans le temps pour une même occurrence. Je ne vois pas l'intérêt de modéliser une entité Prix et j'ajoute que je n'ai jamais vu ce type de modélisation (ce qui n'exclut pas la possibilité de le faire).


    Citation Envoyé par redah75 Voir le message
    j'ai finallement decidé d'associer QU'UN SEUL titre au produit parent, c'est à dire que j'aurais toujours une url du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    site.com/ma-belle-chaussure-100002.html // chaussure cuir noir
    site.com/ma-belle-chaussure-100003.html // chaussure cuir rose
    site.com/ma-belle-chaussure-100004.html // chaussure daim noir
    et du coup je sacrifie le fait de mettre la couleur et la matiere dans l'url afin de simplifier le travail de traduction...

    4- penses tu que c'est une bonne idee et qu'il y aurait des repercussions par rapport au referencement naturel?
    Je ne comprends pas bien la question. L'URL est-elle une propriété du modèle ? Si oui, dans quelle entité ou association se situe-t-elle ?

    Citation Envoyé par redah75 Voir le message
    5- concernant les poitures des chaussures et egalement les tailles de vetement, comment ferais tu toi pour pourvoir les afficher en taille US, UK??
    j'ai pensé a mettre uniquement la taille en FR, puis apres en PHP je la convertie en US ou UK si demandé par le client
    Le principe est bon dans la mesure où les tailles US et UK seraient calculées à partir de la taille FR avec une règle de conversion à la demande. Mais attention, si un jour l'affichage des pointures/tailles US et UK devient systématique, le calcul sera lui aussi systématique impactant directement les performances de l'application. A toi de faire le bon choix : calcul à la demande ou ajout de groupes du type Pointure_US, Pointure_UK, Taille_US, Taille_UK.


    Citation Envoyé par redah75 Voir le message
    6- comment ferais tu pour mettre en place les produits de la meme famille. c'est a dire lorsqu'on est sur la fiche detaillée d'un appareil photo, je te propose d'acheter egalement une housse, batterie supplementaire, pilles, carte SD, ...
    [ Produit ]--1,1----( )----0,n->[ Famille ]

    Si les produits peuvent appartenir à plusieurs familles :

    [ Produit ]--0,n----( P_F )----0,n--[ Famille ]
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

Discussions similaires

  1. Gestion de stock : Formule en section Détail
    Par JeremieT dans le forum IHM
    Réponses: 4
    Dernier message: 16/12/2005, 17h02
  2. Gestion de stock CMUP après chaque entrée
    Par priest69 dans le forum Access
    Réponses: 9
    Dernier message: 13/12/2005, 10h03
  3. Gestion de stock - Prix Moyen Pondéré
    Par hugo69 dans le forum Access
    Réponses: 33
    Dernier message: 28/10/2005, 17h03
  4. Analyses du progiciel de gestion de stock COSWIN CS 5.2
    Par africanroseonlyone dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 13/10/2005, 15h01
  5. gestion des stocks
    Par gekondo dans le forum Access
    Réponses: 1
    Dernier message: 30/09/2005, 11h41

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