PDA

Ver la Versión Completa : recursividad


aurafern
03-09-2004, 20:00:21
Cordial saludo. Voy a citar un caso para el cual no he encontrado una solucion apropiada. Necesito crear una base de datos para modulo de produccion que me permita crear productos y hacer explosion de ellos

ejemplo: para producir el producto 001 (un pastel en hojaldre) , necesito:

el producto masa1 : 20gr
el producto guiso : 10 gr
el producto pollo desmechado : 3 gr
y la mano de obra

el producto masa1 a su vez es otra receta:
harina 5gr
agua 0.3ml
sal 1gr


el producto guiso a su vez es otra receta:
tomate 5gr
cebolla 5gr
sal 1gr

el producto pollo desmechado se saca del inventario (se compra procesado y desmechado)

Cómo es la estructura de las tablas para ingresar la receta y cómo consulto, por ejemplo la receta detallada hasta el ultimo nivel?.

informe detallado de cuanto me cuesta fabricar un pastel:

Item Costo
===================================================
pastel en hojaldre 1500
masa1 250
harina 5gr 200
agua 0.3ml 20
sal 1gr 30
guiso 350
tomate 5gr 150
cebolla 5gr 170
sal 1gr 30
pollo 400
mano de obra 500



Alguien ha resuelto algo parecido o sabe donde puedo conseguir una guia para la solucion de este problema? De entemano muchas gracias

guillotmarc
03-09-2004, 20:55:15
Hola.

Cada producto es un árbol. Supón que los almacenas en la tabla productos, para indicar los hijos que tiene un determinado producto, te recomiendo que utilizes otra tabla (que mantenga una relación 1..n con la misma tabla productos).

Asi tienes

PRODUCTOS : IdProducto, Nombre_Producto

HIJOS : IdPadre, IdHijo, Cantidad

Para obtener una receta completa, solo tienes que hacer un recorrido completo del árbol del producto. Es decir, accedes al producto, miras los hijos que tiene, accedes a cada uno de los hijos, para cada uno miras sus hijos, accedes a cada uno de sus hijos, ... (Efectivamente es un recorrido recursivo).

Ya veras que es fácil de implementar.

Saludos.

jachguate
03-09-2004, 21:10:40
Hola.

Sobre tu problema, y siguiendo con la idea de marcos, interbase/firebird soporta llamadas recursivas a los procedimientos almacenados. Con ello, se puede convertir en algo tan simple como:


Select *
from explosion_materiales(:codigo);


y explosion materiales, se encargará de llamarse recursivamente para aquellos materiales "compuestos".

Ahora. Has colocado antes esta pregunta en otro hilo. La guia de estilo (leela si no lo has hecho todavia) recomienda no duplicar las preguntas, por lo que lo pertinente es que esperaras respuestas alla.

Hasta luego.

;)

aurafern
10-09-2004, 18:04:38
Agradezco su inmensamente su ayuda!!!! :D