我正在为配方成本管理创建一个数据库模式,遇到了一个我不知道如何最好地解决的问题。
我有一张配料表(Id_ingedients,Name_ingredients,….)我有一个表格配方(Id_recipe,Name_recipe、Type_recipe……)
Type_recipe为:Finished_procipe或Sub_recipe
我有一个转换表ingredients_recipe(Id_ingredients,Id_recipe)
现在我的问题是:食谱可以包含配料(简单),但也可以包含子食谱类型的食谱!!此外,Sub_recipe类型的配方可以包含成分,但也可以包含Sub_recipe。
我找到了一个一级Sub_recipe:的解决方案
我创建了一个表Sub_recipe(Id_Sub_recipe,Subrecipe名称,…)以及中间表ingedients_sub_recipe(Id_sub_recipe,Id_ingredients)以及用于链接配方和sub_recipe 的表sub_recipe_recipe(id_recipe,id_sub_recipe)
但是如果这个sub_recipe包含另一个子_recipe,这个模式就不起作用!!
我觉得我在数据库设计上错了,你能帮我设计数据库模式吗。
感谢
您只需要3个表:
- 成分-ingredient_id、ingredient_name
- recipes-recipe_id、recipe_name、。。。。(不需要类型,因为在更大的菜中使用时,每个食谱都可以表现得像子食谱)
- 连接-parent_recipe_id、child_recipe_id、child_ingredient_id
例如,如果你的菜是按照食谱1:烹饪的
- 配方1包含成分A和B+配方2+配方3
- 配方2包含成分C、D和E
- 配方3包含成分F+配方4
- 配方4包含配方5+配方6,但本身没有任何成分
- 配方5含有成分G和H
- 配方6含有K和L成分
所以你的转换表(CONNECTIONS)看起来像这个
+------------------+-----------------+---------------------+
| Parent_recipe_id | Child_recipe_id | Child_ingredient_id |
+------------------+-----------------+---------------------+
| 1 | NULL | 1 |
+------------------+-----------------+---------------------+
| 1 | NULL | 2 |
+------------------+-----------------+---------------------+
| 1 | 2 | NULL |
+------------------+-----------------+---------------------+
| 1 | 3 | NULL |
+------------------+-----------------+---------------------+
| 2 | NULL | 3 |
+------------------+-----------------+---------------------+
| 2 | NULL | 4 |
+------------------+-----------------+---------------------+
| 2 | NULL | 5 |
+------------------+-----------------+---------------------+
| 3 | NULL | 6 |
+------------------+-----------------+---------------------+
| 3 | 4 | NULL |
+------------------+-----------------+---------------------+
| 4 | 5 | NULL |
+------------------+-----------------+---------------------+
| 4 | 6 | NULL |
+------------------+-----------------+---------------------+
| 5 | NULL | 7 |
+------------------+-----------------+---------------------+
| 5 | NULL | 8 |
+------------------+-----------------+---------------------+
| 6 | NULL | 9 |
+------------------+-----------------+---------------------+
| 6 | NULL | 10 |
+------------------+-----------------+---------------------+