2016-11-29 3 views
0

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

  • Есть меню Категория (например, питание от сети, Sides, напитки, десерты)
  • Там находятся пункты меню в каждой категории (Burger, чипсы, салат и т.д.)
  • Это просто, но проблема Я столкнулся с категорией пунктов меню, которая имеет второй тип MenuItems, которые являются комбинацией других пунктов меню. Возьмите за пример , в меню Mcdonald's есть пункт меню еды, в который входит гамбургер + фри + напиток. В этом случае это комбинация трех разных категорий (гамбургер, бока и напиток), и пользователь может выбрать из несколько вариантов в этой категории. И есть много таких комбинаций, присутствующих в категории продуктов питания.

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

До сих пор я пытался создать отдельный объект comboMenuItems, который имеет все атрибуты MenuItem (имя, описание, цена и т. Д.), За исключением того, что их категория фиксирована как (категория MealDeals, исходящая из Таблица категорий).

Чтобы сделать ситуацию более сложной, иногда у кулинарного дела есть количество, связанное с ней, что означает, что клиент может выбрать более одного предмета из категории. Примером этого может быть семейная сделка, которая включает 2 гамбургера, 2 стороны и напиток. Я не уверен, как создать db, чтобы удовлетворить это бизнес-правило.

Есть несколько других деталей MenuItems (например, варианты, варианты и т. Д.), Но я опускаю их из этого вопроса, чтобы упростить его понимание.

Я ищу сущности и отношения, которые могут справиться с этой ситуацией.

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

+0

Просьба дать некоторые конкретные полные проекты, которые на самом деле представляют доступные варианты, не беспокоясь о том, насколько они «хороши», насколько они кратки и насколько утомительны. Вы можете начать с размышления обо всех возможных путях, чтобы завершить предложение «Я хотел бы заказать ...». – philipxy

ответ

0

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

Например, ID: 1, Цена: 3.50, MainIDs: 1 | 7 | 14 | 15 | 16 | 19, SideIDs: 4 | 5 | 7 | 11, DrinkIDs: 5 | 6 | 7

, скажем, например, клиент добавляет основную 1, сторону 4 и выпивает 5 в свою корзину, ваш запрос выполняет поиск, чтобы вернуть все идентификационные данные об оплате еды (и цены), которые содержат эту комбинацию предметов.

Надеюсь, я правильно понял ваш вопрос, и я надеюсь, что это поможет.

+0

Это реляционный дизайн или работа вокруг? Я вижу, что будут проблемы принудительного ограничения, потому что нет никаких принудительных отношений между menuItem и mealDeals. – Novice

+0

@Novice Любой дизайн базы данных, независимо от того, какая парадигма, какой бы извращенной она ни была, может быть описана реляционно, обычно, по крайней мере, как сжато. Здесь у нас есть стол, в котором находятся строки, где «Идентификатор сделки имеет цену PRICE и разрешает main в MAINIDS и бок в SIDEIDS и пить в DRINKIDS». Мы можем избавиться от многозначных атрибутов, чтобы мы могли запросить их детали, используя несколько таблиц: «Идентификатор сделки имеет цену PRICE», «ID сделки разрешает основной MAINID», «ID сделки позволяет стороне SIDEID» и «ID сделки» напиток DRINKID ". Сначала найдите таблицы для описания всех возможных ситуаций приложения. Позднее будьте обеспокоены ограничениями. – philipxy

+0

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