Моделирование базы данных рецептов еды - PullRequest
5 голосов
/ 09 февраля 2011

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

рецепты (recipeID и т. Д.)
ингредиент (ингредиент и т. д.)
recipeIngredient (recipeID, ингридиентID, количество)
категория (categoryID, имя)
recipeCategory (recipeID, categoryID, имя и т. д.)

Итак, у меня есть пара вопросов.

  • Как дела? Это дизайн хорошо из того, что вы все знаете?
  • Как бы я реализовал подготовительные этапы? Должен ли я создать дополнительную реализацию «многие ко многим» (что-то вроде подготовки (prepID и т. Д.) И recipePrep (recipeID, prepID)) или просто добавить указания в таблицу рецептов? Я хотел бы, чтобы это был упорядоченный список в пользовательском интерфейсе (веб-страница).

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

Рассматривали ли вы какие-либо существующие схемы, такие как эта в DatabaseAnswers?

1 голос
/ 09 февраля 2011

некоторые мысли:

Возможно, вы захотите использовать одну и ту же таблицу для рецепта и ингредиента со столбцом индикатора типа.Причина в том, что рецепты могут содержать подрецепты.Назовем объединенную таблицу «Товар».Тогда ваша таблица RecipeIngredient будет выглядеть так:

 RecipeIngredient (RecipeId, ItemId, Amount).  

Я ожидаю, что таблица также будет иметь столбец последовательности.

Если вы хотите выполнить какие-либо вычисления с этими рецептами (например, масштабирование, анализ питания, планирование производства) тогда ваши количества должны будут указать единицу измерения.Вы можете сделать это явно (имея отдельный столбец для uofm) или вы можете использовать текстовое поле для количества и ожидать, что пользователь будет вводить значения, такие как «1 чашка» или «2 столовые ложки».Если вы воспользуетесь этим подходом, вам нужно убедиться, что то, что они вводят, узнаваемо, и анализировать их каждый раз, когда вам нужно их использовать.Это может стать удивительно сложным, особенно если вы хотите представить рецептуру формально.

Предполагая, что вы хотите 1: M от рецепта до категории, я все еще не уверен, почему в вашей таблице RecipeCategory будет столбец Имя.Я думаю, что название происходит от определения категории.

Я согласен с Дейвом, что маловероятно, что вы будете повторно использовать этапы подготовки от рецепта к рецепту, и поэтому таблица RecipePreparationSteps (или что-то подобное) будет более подходящей.

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

Вступительный текст некоторых ингредиентов.подготовить инструкции еще несколько ингредиентов, выпечки инструкции.

Для этого вам необходимо умело установить значения последовательности в таблицах шагов RecipeIngredient и RecipePreperation, чтобы можно было объединять данные из обоих в надлежащем порядке для представления.Другой подход заключается в том, чтобы вместо этих двух таблиц использовать таблицу «RecipeLine», чтобы каждая строка могла представлять либо инструкцию, либо компонент.Я думаю, что это может быть то, что вы предлагали.Пуристы нахмурились бы за такую ​​перегрузку стола, но я не пурист.

Это тема, о которой я много знаю, так что спросите что-нибудь.

0 голосов
/ 09 февраля 2011

Похоже, хорошее начало.Несколько мыслей:

  1. Не вижу необходимости в таблице recpieCategory.Подойдёт один ко многим между рецептом и категорией.
  2. Таблица PrepSteps должна содержать 1-n шагов для каждого рецептаЯ бы не стал повторять шаги между рецептами.
...