Database design 如何表示“多对多”;X包含Y“;表和表本身之间的关系?

Database design 如何表示“多对多”;X包含Y“;表和表本身之间的关系?,database-design,Database Design,我有一桌食物,比如“康沃尔糕点”、“炖菜”和“胡萝卜”。我想模拟一个事实,即食物可以包含其他食物。(例如,康沃尔糕点中含有蔬菜炖肉,蔬菜炖肉中含有胡萝卜,但人们可能会单独食用蔬菜炖肉,或者可能会在不同的食谱中加入胡萝卜。) 所以我想我应该通过在食物表和它本身之间建立一个多对多的关系来对此进行建模?这意味着我将有一个单独的“食物包含”表,它将存储包含食物的ID、包含食物的ID以及包含多少的度量 我在这里要解决的最常见的问题是“根据我吃过的食物清单,我吃了多少胡萝卜?”所以我必须把生吃胡萝卜的贡献加

我有一桌食物,比如“康沃尔糕点”、“炖菜”和“胡萝卜”。我想模拟一个事实,即食物可以包含其他食物。(例如,康沃尔糕点中含有蔬菜炖肉,蔬菜炖肉中含有胡萝卜,但人们可能会单独食用蔬菜炖肉,或者可能会在不同的食谱中加入胡萝卜。)

所以我想我应该通过在食物表和它本身之间建立一个多对多的关系来对此进行建模?这意味着我将有一个单独的“食物包含”表,它将存储包含食物的ID、包含食物的ID以及包含多少的度量

我在这里要解决的最常见的问题是“根据我吃过的食物清单,我吃了多少胡萝卜?”所以我必须把生吃胡萝卜的贡献加起来,再加上吃过的蔬菜炖菜中所含的胡萝卜,再加上吃过的康沃尔糕点炖菜中的胡萝卜,等等


是否有更自然/标准的方式来表示这些层次结构?

这通常被称为物料清单(BOM)。如果你搜索这个词,你应该能找到大量的例子。