Дизайн базы данных: вложенные таблицы

Я работаю над созданием схемы базы данных для управления стоимостью рецептов, и я столкнулся с проблемой, которую не знаю, как лучше всего решить.

У меня есть таблица ингредиентов (Id_ingedients, Name_ingredients, ....) У меня есть рецепт таблицы (Id_recipe, Name_recipe, Type_recipe, ....)

Type_recipe: Finished_recipe или Sub_recipe.

У меня есть таблица переходов ингридиенты_рецепт (Id_ingredients, Id_recipe)

Теперь моя проблема: рецепт может содержать ингредиенты (легко), но также рецепт с типом Sub-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 !!

Я думаю, что ошибаюсь в дизайне базы данных, не могли бы вы помочь мне разработать схему моей базы данных.

Спасибо


person Olivier TOVO    schedule 27.01.2019    source источник


Ответы (1)


Вам понадобится всего 3 стола:

  1. ингредиенты - идентификатор_ ингредиента, имя_ ингредиента, ....
  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

поэтому ваша таблица переходов (СОЕДИНЕНИЯ) будет выглядеть так

+------------------+-----------------+---------------------+
| 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          |
+------------------+-----------------+---------------------+
person IVO GELOV    schedule 27.01.2019