【问题标题】:Database design: nested tables数据库设计:嵌套表
【发布时间】:2019-06-20 14:28:07
【问题描述】:

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

我有一个表成分(Id_ingedients, Name_ingredients, ....) 我有一个表食谱(Id_recipe、Name_recipe、Type_recipe、....)

Type_recipe 是:Finished_recipe 或 Sub_recipe

我有一个转换表 Ingredient_recipe (Id_ingredients, Id_recipe)

现在我的问题是:配方可以包含成分(简单),但也可以包含子配方类型的配方! Sub_recipe 类型的配方也可以包含成分,也可以包含 sub_recipe。

我找到了一种解决方案,适用于一级 Sub_recipe:

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

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

我认为我在数据库设计上错了,你能帮我设计一下我的数据库架构吗?

谢谢

【问题讨论】:

    标签: database database-design database-relations


    【解决方案1】:

    您只需要 3 个表:

    1. 成分 - 成分 ID、成分名称、....
    2. recipes - 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          |
    +------------------+-----------------+---------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      相关资源
      最近更新 更多