dzheka3d
@dzheka3d

Как составить правильную модель mysql?

Пишу движок для сайта с рецептами... Вот задумался о логической модели Mysql.
Есть рецепт, в нем присутствует блок, например:
Основные ингредиенты (яблоко, свекла, картофель и т.д.) ну и сам рецепт
Я вижу это так:
Создаем таблицу с рецептами (где сам рецепт)
Таблица основных ингредиентов (id, название ингридиента, каллорийность)
Связующая таблица ингридиентов и рецепта (id рецепта, id ингредиента)


Правильно ли будет? Если я захочу добавить еще несколько таких блоков вроде: География кухни, способ приготовления и т.д.
И для каждого из таких блоков буду создавать таблицу с вариантами и связующую таблицу

Или может есть более приемлемый способ?
  • Вопрос задан
  • 473 просмотра
Решения вопроса 2
elevenelven
@elevenelven
Php Dev @ Amadeus
habrahabr.ru/post/254773

Исходя из описания, вы верно разбили сущности на 3 таблицы.

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

Если же вы реализуете отошение один-ко-многим, то без промежуточной таблицы не обойтись.
Ответ написан
Комментировать
mytmid
@mytmid
нормальные люди в тостере хлеб поджаривают :D
Как разработчик кулинарного сайта не рекомендую выделять ингредиенты в отдельную таблицу, практической пользы от этого нет, а при достижении количества рецептов, например, 1000 штук - добавление новых рецептов станет муторной и медленной работой :)

Вместо трёх таблиц, создайте одну с полями (приблизительно):
id
etapi -этапы приготовления
ingr - ингредиенты

В поле ingr вписываете ингредиенты через точку с запятой, например, вот так:
Ингредиент1 200 грамм;
Ингредиент2 3 штуки;
Ингредиент3 по вкусу;
Ингредиент4 1/2 стакана;


...далее парсите и выводите результат, упакованный в <ul><li></li></ul>

И стоит учесть, что для сайта кулинарной тематики следует использовать микроразметку, иначе желаемого трафика можно не получить)))
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
OnYourLips
@OnYourLips
Правильно ли будет?
Да, это обычная связь многие ко многим.
Ответ написан
Комментировать
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
ИМХО тянуть ингредиенты из таблиц - устанете заполнять рецепт. Оно конечно правильно с академической точки зрения, но с реальной даст профит пожалуй только в том, что ингредиенты будут везде называться одинаково. Зато если планируете давать пользователю заводить рецепт - как заводить новый ингредиент? А если дать это пользователю - в результате 100% получите 20 вариантов майонезов.
Ответ написан
Комментировать
PavelK
@PavelK
По-моему тут таблица для связи лишняя. Просто добавляете поле, например ingredients и в него через запятую все ингридиенты из таблицы ingredients.
если будут ещё "блоки" то просто новое поле.

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

Можно сделать "глобальную" таблицу связей, где будет хранится адишник, айдишник для связи, исходная таблица и таблица с которой связывается
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы