Задать вопрос
dzheka3d
@dzheka3d

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

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


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

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

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

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

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

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

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

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

Похожие вопросы