have a junction table that ties products to ingredients to represent recipes. I intend to allow users to use "sub-recipes", which would mean you can include one recipe inside of another. Logically, this shakes down to mean that in the front-end, when you add a "sub-recipe" to a recipe, then in the back-end you just create an entry in product_has_ingredient tying each of the ingredients related to the sub-recipe product to the new product. However, this does not maintain the idea that the relationship is distinct from normal ingredients. I am trying to come up with a way to allow a product to optionally have a sub-recipe that maintains the same functional structure as what I have now. I can't think of a scalable way to do this that does not require some convolution of this schema.
One option would be, rather than product_has_ingredient, to have product_has_recipe, and then then have ANOTHER junction table of recipe_has_ingredient. I'm hoping there's a better way!