Дизайн базы данных: вложенные таблицы - PullRequest
0 голосов
/ 27 января 2019

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

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

Тип рецепта: Finished_recipe или Sub_recipe

У меня есть таблица переходов ингредиентов_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 !!

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

Спасибо

1 Ответ

0 голосов
/ 27 января 2019

Вам нужно только 3 таблицы:

  1. ингредиенты - идентификатор_ ингредиента, имя_ ингредиента, ....
  2. рецепты - идентификатор_рецепта, имя_рецепта, .... (не нужно указывать типпоскольку каждый рецепт может вести себя как суб-рецепт при использовании в большем блюде)
  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          |
+------------------+-----------------+---------------------+
...