数据库设计:嵌套表

时间:2019-01-27 11:17:01

标签: database database-design database-relations

我正在为配方成本管理创建数据库架构,但遇到一个我不知道如何最好解决的问题。

我有一张餐桌配料(Id_ingedients,Name_ingredients等。) 我有一张餐桌食谱(Id_recipe,Name_recipe,Type_recipe等)。

Type_recipe是:Finished_recipe或Sub_recipe

我有一个过渡表Ingredients_recipe(Id_ingredients,Id_recipe)

现在是我的问题:食谱可能包含成分(简单),但也可能包含次级食谱类型!而且Sub_recipe类型的配方可以包含成分,也可以包含sub_recipe。

我找到了一个degre Sub_recipe的解决方案:

我创建一个表Sub_recipe(Id_sub_recipe,Subrecipe名称,...) 和中间表ingedients_sub_recipe(Id_sub_recipe,id_ingredients) 和一个表sub_recipe_recipe(id_recipe,id_sub_recipe)链接配方和sub_recipe

但是,如果此sub_recipe包含另一个sub_recipe,则此架构不起作用!

我认为我在数据库设计上错了,您能帮我设计数据库架构吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您只需要3张桌子:

  1. 成分-成分ID,成分名称....
  2. 食谱-recipe_id,recipe_name,...。(不需要类型,因为在更大的菜肴中使用时,每个食谱的行为都可以像子食谱一样)
  3. 连接-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          |
+------------------+-----------------+---------------------+