Pb conception (nomemclature d'une piece)

Pb conception (nomemclature d'une piece) - SQL/NoSQL - Programmation

Marsh Posté le 07-09-2006 à 14:15:19    

Bonjour,  
 
voila imaginons la nomenclature suivante :
http://img74.imageshack.us/img74/917/orgamq1.jpg
Mon but est de calculer le prix du produit en fonction des liens et du prix de chaque composant.
 
Le problème est que je ne vois pas trop comment designer ma base
 
J'ai pour l'instant, une table de prix et une autre sous cette forme :


X | A | 2
X | B | 1,5
X | C | 4
C | D | 1,3
C | E | 1,4


 
Cela me semble pratique car on ne sait pas combien de niveau il peut y avoir. Mon problème est que je ne vois pas comment requeter pour obtenir mon prix de X.
 
Si quelqu'un a ue idée,
merci :hello:


Message édité par $man le 07-09-2006 à 14:16:12
Reply

Marsh Posté le 07-09-2006 à 14:15:19   

Reply

Marsh Posté le 07-09-2006 à 16:36:02    

il faut une table produit et une table composant avec le prix et une jointure entre les 2 tables... et puis basta ;)

Reply

Marsh Posté le 07-09-2006 à 17:02:51    

Salut,
 
cela pose un pb de niveau, un composant peut "se retrouver produit" (cas pour un semi fini). Cel ne me poserait psa pb s'il le nombre de niveau était définie :/
La table prix ne pose pas pb, elle m'est imposée. Elle contient le date / prix de chaque matiere "élémentaire".
 
Merci :hello:

Reply

Marsh Posté le 08-09-2006 à 08:46:20    

rien n'empêche d'avoir un composant dans les produits... quand c'est un produit il n'est plus composant c'est tout ;)

Reply

Marsh Posté le 08-09-2006 à 08:55:07    

c'est pas un truc de ce style qu il te faut (oubien je suis complet a cote de la plaque):

Code :
  1. select sum(t1.lien*t2.prix)
  2. from liens t1 inner join prix t2 on t1.composant2 = t2.composant

Reply

Marsh Posté le 08-09-2006 à 10:18:26    

Non, j'aimerais par exemple obtenir :


X | A | 2
X | B | 1,5
X | D | 4 * 1,3
X | E | 4 * 1,4


 
Merci  :hello:


Message édité par $man le 08-09-2006 à 11:14:52
Reply

Marsh Posté le 08-09-2006 à 10:49:11    

ah oui j etais a la rue :-)
 
en mettant que ta table de depart soit celle ci:
compos_depart|compos_arrivee|lien
X | X | 1
X | A | 2  
X | B | 1,5  
X | C | 4  
C | D | 1,3  
C | E | 1,4
 
voici ma suggestion
 

Code :
  1. select B.compos_arrivee,A.compos_arrivee,A.lien * B.lien
  2. FROM
  3. (select compos_depart,compos_arrivee,lien
  4. from tatable
  5. where compos_arrivee not in
  6. (
  7. select compos_depart
  8. from tatable
  9. )
  10. )A inner join
  11. (
  12. select compos_arrivee,lien
  13. from tatable
  14. where compos_arrivee in
  15. (
  16. select compos_depart
  17. from tatable
  18. )
  19. )B on A.compos_depart = B.compos_arrivee

Reply

Marsh Posté le 08-09-2006 à 11:15:38    

Merci, je m'étais trompé dans ce que je voulais obtenir (cf plus haut) :D
De plus, je ne suis pas sur que ca fonctionne pour un niveau > 2.
Je vais continuer à chercher !
 
Merci en tous cas.


Message édité par $man le 08-09-2006 à 11:21:59
Reply

Marsh Posté le 11-09-2006 à 16:17:37    

si tu utilises Oracle, utilise "connect by ... prior" qui permet de faire des requêtes récursives
 
sinon, cherche sur le net une solution te permettant de reproduire ce comportement, mais c'est pas gagné, tu devras certainement passer par du PL/SQL ou un langage externe qui fait 25 requêtes
 
c'est la grosse lacune de la norme SQL : les hiérarchies recursives ne sont pas définies dans la norme, donc peut de SGBD proposent des solutions

Reply

Sujets relatifs:

Leave a Replay

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