Problème MCD

Problème MCD - SQL/NoSQL - Programmation

Marsh Posté le 24-10-2008 à 09:57:22    

Bonjour,
 
je suis en en 2ème année de mon DUT Informatique, et nous avons un projet à faire pour une entreprise (un site internet de vente en ligne, pour notre groupe).
Nous sommes en train de concevoir le MCD, mais nous avons un problème pour relier certaines de nos tables.
 
Le problème:
 
J'ai une table "PRODUITS" que nous voulons la relier aux 3 tables suivantes : "VETEMENTS", "MOTOS", "PROTECTIONS" !
Le problème c'est que nous n'avons pas trouvé de solution pour les relier entre elles.
 
Voir le MCD :
 
http://img404.imageshack.us/img404/2628/mcdprofilmotosxz6.th.pnghttp://img404.imageshack.us/images/thpix.gif
 
En fait, les 3 tables "VETEMENTS", "MOTOS" et "PROTECTIONS" sont des produits. Et la table produit doit regrouper tous les produits du site (chaque produit doit donc avoir un n° unique).
 
-On ne peut pas relier les 3 tables directement à la table "PRODUITS", car sinon chaque objet produit contiendra un vêtement, une moto et une protection (en gros, il y aura un numéro pour les 3 produits)
 
-On a esseyé de creer une table itermédiaire entre les 3 tables et la table "PRODUITS", mais on a ensuite un problème de cardinalitée : en effet, on souhaite se retrouver avec les clé étrangères des 3 tables dans la table intermédiaire (et non l'inverse).
 
Voir MCD:
 
http://img72.imageshack.us/img72/2401/mcdprofilmotos2qa9.th.pnghttp://img72.imageshack.us/images/thpix.gif
 
Donc voilà concretement notre problème ^^ !
Si quelqu'un est balèze en MCD et qu'il peut nous donnez un p'tit "coup d'pouce" ;-) !
Merci d'avance à tous.

Reply

Marsh Posté le 24-10-2008 à 09:57:22   

Reply

Marsh Posté le 24-10-2008 à 10:05:07    

qu'est ce qui va se passer le jour ou ta boutique vendra un nouvel accessoire ( par exemple un pare buffle ou des scie sauteuses) ? tu vas créer une nouvelle table ?  
 
est ce que ça ne vaudrait pas le coup de regrouper les produits dans  la table produits ?

Reply

Marsh Posté le 24-10-2008 à 10:13:00    

Tout d'abord merci de ta réponse flo850 !
En fait, l'administrateur n'ajoutera pas de nouvelle catégorie, donc il n'y aura pas de création de nouvelle table.
Et pour répondre à ta question, on ne peut pas regrouper les catégorie de produit dans la table "PRODUITS" car les catégorie n'ont pas toutes les mêmes attributs (c'est d'ailleurs pour cela que l'ont a creer 3 tables à part).
On pourrait éventuellement tout regrouper dans la table "PRODUITS" mais il y aurait des attributs "null".

Reply

Marsh Posté le 24-10-2008 à 10:14:36    

Votre solution n'est pas conceptuellement correcte. Les 3 tables vetements, motos et protections n'ont pas lieu d'être.
 
Le plus propre est de faire 2 tables :
- une table "produits" qui contiendra les infos sur le produit
- une table "catégorie" qui contiendra la catégorie du produit (vetements, motos ou protections)
 
La table "produits" contiendra une clé étrangère vers la table "catégorie", indiquant ainsi la catégorie du produit.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-10-2008 à 10:22:49    

Oui, mais comme je l'est dit juste au dessus, on aura après des attributs qui seront null dans la table "PRODUITS", car tous les produits n'ont pas tous les même attributs.

Reply

Marsh Posté le 24-10-2008 à 10:30:13    

Tu fais une table en plus :  
- Produit_id
- Category_id
- Produit_detail_id
 
avec produit_detail_id la FK vers ta table VETEMENTS, MOTO ou whatever.
 
?

Reply

Marsh Posté le 24-10-2008 à 11:05:28    

Je ne comprend pas très bien l'utilité de la table Produit_detail_id.
 
On vient d'essayer avec des liens d'héritage (en supposant que les 3 tables soient des "filles" de la classe "PRODUIT", et en mettant les attributs communs aux 3 tables dans "PRODUIT", puis en rajoutant les attributs propres à chaque tables dans celle qui lui correspond) mais on n'y arrive toujours pas.

Reply

Marsh Posté le 24-10-2008 à 11:32:29    

moustik74 a écrit :

Je ne comprend pas très bien l'utilité de la table Produit_detail_id.
 
On vient d'essayer avec des liens d'héritage (en supposant que les 3 tables soient des "filles" de la classe "PRODUIT", et en mettant les attributs communs aux 3 tables dans "PRODUIT", puis en rajoutant les attributs propres à chaque tables dans celle qui lui correspond) mais on n'y arrive toujours pas.


Ce n'est pas une table mais un attribut. il te permet de retrouver la ligne correspondant au produit dans ta table "fille".  
Exemple, tu as  
- Produit_id = 10
- Category_id = 1
- Produit_detail_id = 4
 
Tu sais que le 10e produit de ton catalogue est de type 1 et que tu pourras trouver ses détails dans la table correspondante, à l'id 4.

Reply

Marsh Posté le 24-10-2008 à 11:42:55    

Je maintiens, et je pense savoir de quoi je parle, que les 3 tables doivent être supprimées au profit d'une table "Catégorie" et d'une table "Produit" qui contiendra une clé étrangère.
Maintenant, au sujet des attributs, le mieux est de créer une table "Attributs" qui contiendra un id et le libellé de tous les attributs, et enfin créer une 4eme table "AttributCategorie" qui contiendra 2 champs : l'id de la catégorie, et l'id de l'attribut correspondant.
Tu rajoutes une clé étrangère sur la table "Attributs" vers le champ "id attributs" de cette table, une clé étrangère sur la table "Catégorie" vers le champ "id catégorie", et le problème est réglé de façon propre et extensible. Comme il y a une relation "plusieurs à plusieurs" entre les catégories et les attributs, une table de liaison ("AttributCategorie" donc) est nécessaire.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-10-2008 à 13:50:56    

pas mieux que harko  
 
en plus, au pire, des attributs null, ca m'empeche pas de dormir la nuit
 

Reply

Marsh Posté le 24-10-2008 à 13:50:56   

Reply

Marsh Posté le 24-10-2008 à 14:00:59    

C'est quoi le problème avec ma solution ?

Reply

Marsh Posté le 24-10-2008 à 14:02:01    

devior créer une nouvelle table a chaque nouveau produit ?  
ajouter une jointure en plus  à chaque requete ?  
 

Reply

Marsh Posté le 24-10-2008 à 14:06:41    

Une nouvelle table par type de produits... et je vois pas trop où est le problème. Et en terme de jointures, ca doit etre a peu près équivalent à la solution d'harko.

Reply

Marsh Posté le 24-10-2008 à 14:09:13    

tu vois aps ou est le problème ?
 
ca te derange aps de revoir la structure de la table a chaque changement ? et donc de revoir toutes les pages du site pour afficher les nouveaux produits ?  
 
faut aussi penser a la maintenance de ce genre de solutions

Reply

Marsh Posté le 24-10-2008 à 14:30:05    

did-54 a écrit :

C'est quoi le problème avec ma solution ?


ta solution n'est pas correcte, la preuve, c'est que tu as créé ce topic. si ton modèle était correct, la solution t'aurait sauté aux yeux direct :spamafote:
le souci, c'est que tu créés des tables pour ce qui devrait normalement être des enregistrements. ceci t'obligera à rajouter des tables à chaque fois que tu voudras créer une catégorie comme te l'a dit flo. c'est bien joli de dire que tu n'en rajouteras pas, mais il ne faut jamais raisonner comme ça, et toujours envisager les futurs ajouts

 

voici ce que pourrait être un MPD correct :

 

http://pix.nofrag.com/0/e/4/ee78c618029745d19043273f4f21d.png

 

de cette façon, tu gères autant d'attributs que tu le souhaites, et les relations sont correctes. aucun besoin de rajouter une table si tu rajoutes une catégorie

Message cité 1 fois
Message édité par Harkonnen le 24-10-2008 à 14:30:57

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-10-2008 à 15:25:17    

Merci à tous de nous aidez ^^ !
 
Harkonnen, j'ai essayé de transformer ton texte en MCD ^^ !Dit moi ce que tu en pense stp .
 
http://img225.imageshack.us/img225/2976/mcduz4.th.pnghttp://img225.imageshack.us/images/thpix.gif
 
Si je n'est pas fait ce que tu voulais, fait le moi savoir ;-)

Reply

Marsh Posté le 24-10-2008 à 15:46:08    

Harkonnen a écrit :


ta solution n'est pas correcte, la preuve, c'est que tu as créé ce topic. si ton modèle était correct, la solution t'aurait sauté aux yeux direct :spamafote:
le souci, c'est que tu créés des tables pour ce qui devrait normalement être des enregistrements. ceci t'obligera à rajouter des tables à chaque fois que tu voudras créer une catégorie comme te l'a dit flo. c'est bien joli de dire que tu n'en rajouteras pas, mais il ne faut jamais raisonner comme ça, et toujours envisager les futurs ajouts
 
voici ce que pourrait être un MPD correct :
 
http://pix.nofrag.com/0/e/4/ee78c6 [...] f4f21d.png
 
de cette façon, tu gères autant d'attributs que tu le souhaites, et les relations sont correctes. aucun besoin de rajouter une table si tu rajoutes une catégorie


Je n'ai pas créé le topic, mais ok.

Reply

Marsh Posté le 24-10-2008 à 15:59:49    

moustik74 a écrit :

Merci à tous de nous aidez ^^ !
 
Harkonnen, j'ai essayé de transformer ton texte en MCD ^^ !Dit moi ce que tu en pense stp .
 
http://img225.imageshack.us/img225/2976/mcduz4.th.pnghttp://img225.imageshack.us/images/thpix.gif
 
Si je n'est pas fait ce que tu voulais, fait le moi savoir ;-)


dans la table Attribut_Categorie, il faut mettre 2 champs : l'id de l'attribut et l'id de la catégorie. toi tu n'en a mis qu'un
 

did-54 a écrit :


Je n'ai pas créé le topic, mais ok.


Ah pardon, je t'ai confondu avec l'auteur du topic :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-10-2008 à 11:28:41    

OK je met les 2 attributs id_categorie et id_attribut à la place de id_categorie_attribut, mais ils seront en clé primaire ou étrangère ?parce que c'est un MCD donc les clé étrangère n'apparaissent pas dessus. Et il faut bien au minimum une clé primaire dans une table non ?
 
PS: Pourrais tu me donner un exemple de requête qui servirait à afficher un attribut d'une catégorie en particulier stp ?Car je ne comprend tjrs pas très bien l'utilité de la table intermédiaire "Attribut_categorie" : si il n'y a que 2 clé étrangère dedans, à quoi bon la creer ?Pourquoi ne pas relier directement categorie à attribut ?
 
Merci encore pour ton aide Harkonnen

Reply

Marsh Posté le 26-10-2008 à 20:16:36    

bsr j'ai un exposé sur la relation entre SGBD , MCD et UML aidez moi svpppp

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed