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

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

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

Спасибо.

Ответы [ 5 ]

8 голосов
/ 27 февраля 2011

Мясо, овощи и специи являются ингредиентами , IngredientType (M, V, S) используется для идентификации каждой группы.

enter image description here

ЕслиПо какой-то причине вы чувствуете, что каждому ингредиенту нужна своя таблица, потому что они имеют разные столбцы, и затем используйте эту модель.Сохраните все общие столбцы в таблице Ingredient.

enter image description here

4 голосов
/ 27 февраля 2011

Мне кажется, вы говорите о н-м отношениях:

  • рецепт может иметь много специй / мяса / Овощи
  • Каждый из специй / мяса / овощей можно привязать ко многим рецептам.

Обычно вы храните это в базе данных с помощью таблицы связи между Recipe и, например, Veggies.

Recipe <----> RecipeVeggies <----> Veggies

Каждый рецепт и овощи должны иметь уникальный первичный ключ (id), а таблица RecipeVeggies хранит оба первичных ключа для создания связи между ними.

Вот небольшой пример структуры:

Recipe : id, name, description
Veggies : id, name
RecipeVeggies : recipe_id, veggies_id

В таблице RecipeVeggies сохраняются отношения между рецептом и вегетарианцем.

Вы должны создать аналогичные таблицы для специй и мяса.

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

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

Вот что я бы сделал.

Я бы использовал отображение наследования, оно есть у каждого ORM, и почти у каждого веб-языка оно есть (в php есть доктрина, в java и .net есть Hibernate и т. Д.).

Как показывает пример в этой ссылке , у вас есть таблица в верхней части вашей иерархии, для вашей системы я бы назвал ее Ingredient, а затем в качестве вспомогательного элемента укажите veggie / meat / Специистолы.Затем я создал бы таблицу под названием «Рецепт», и она имела бы отношение один ко многим с таблицей ингредиентов.

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

Спасибо за интересный вопрос, приятно иметь более субъективный вопрос о типе дизайна, чтобы получить творческие соки.

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

У вас есть так называемая n:m Связь между рецептами и ингредиентами.Обычный метод решения этой проблемы в реляционной базе данных состоит в том, чтобы ввести таблицу сопоставления.

Скажем, каждый из ваших рецептов имеет идентификатор (RecipeID), а каждый ингредиент также имеет идентификатор (IngredientID).Затем вы создаете новую таблицу, которая содержит столбец RecipeID и столбец IngredientID.Каждая запись в этой таблице сопоставляет ингредиент с рецептом и наоборот.

Такая таблица также удобна, если вы хотите уточнить отношения дальше.Например, вы можете добавить еще один столбец в таблицу сопоставления, содержащий описание того, сколько ингредиента потребуется для рецепта.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...