Bien. Tenemos los siguientes productos con sus respectivos códigos:
Productos id / nombre
1 / Ventana
2 / Cristal
3 / Marco
4 / Puerta
5 / Picaporte
Ahora nos paramos a pensar. Una ventana tiene cristal y marco (por ejemplo, pues podría tener picaporte). Una puerta tiene marco y picaporte (tambiénj podría tener cristal, pero eso no lo tenemos en cuenta) .
Entonces para realizar esto vamos a necesitar que un producto (ventana) contiene varios productos (cristal y marco) . A la vez, tenemos que un producto (marco) está contenido en varios productos (ventana y puerta) . Esto es lo que llamamos una relación de varios a varios. Y para implementar esta relación es necesario crear una tabla nueva. Esta tabla tiene por cada relación, un registro, es decir, en este caso tendrá un registro para la relación ventana-marco, otro para la relación ventana-cristal, otro para la relación puerta-marco y otro para la relación puerta-picaporte. Esta relación se establece en la tabla FormadoPor utilizando los ids de los productos que queremos relacionar. De esta forma la tabla FormadoPor nos quedaría así (sin tener en cuenta lo que hay entre paréntesis):
FormadoPor producto_entero / producto_parte
1 (ventana) / 2 (cristal)
1 (ventana) / 3 (marco)
4 (puerta) / 3 (marco)
4 (puerta) / 5 (picaporte)
Así, si por ejemplo quieres obtener todos los productos que forman una ventana puedes hacer la siguiente consulta (en mysql):
Código:
SELECT Productos.id, Productos.nombre FROM Productos INNER JOIN FormadoPor ON FormadoPor.producto_parte=Productos.id WHERE FormadoPor.producto_entero=1
Espero que te haya quedado un poco más claro. De no ser así, insiste que lo intento de nuevo
Un saludo