数据库设计餐厅菜单

时间:2016-11-29 09:04:06

标签: database-design relational-database

我正在努力设计关系数据库的实体。我正在设置一个在线餐厅菜单,用于在应用程序中动态加载。基于我对菜单的理解,我提出了以下实体。

  • 有菜单类别(例如主菜,面,饮料,甜点)
  • 每个类别(汉堡,薯片,沙拉等)都有菜单项
  • 这很简单,但我遇到的问题是一类菜单项,它们有第二种类型的MenuItems,它们是其他菜单项的组合。采取 例如,麦当劳菜单中的餐饮交易类别包括汉堡+ 薯条+饮料。在这种情况下,它是三种不同的组合 类别(汉堡,两侧和饮料)和用户可以选择 该类别中的多个选项。并且在膳食交易类别中存在许多这样的组合。

我应该如何设计数据库,这对于创建来自不同类别的其他简单MenuItem的组合非常有用。理想情况下,我应该能够创建新的多个具有此类特殊组合菜单项的类别,但目前我只尝试了一个专门用于此类项目的类别。

到目前为止,我已经尝试过创建一个单独的comboMenuItems实体,它具有MenuItem的所有属性(名称,描述,价格等),除了它们的类别是固定的(来自类别的MealDeals类别)表)。

为了使情况更加复杂,有时餐饮交易具有与之相关的数量,这意味着客户可以从类别中选择多个项目。这方面的一个例子可能是家庭协议,其中包括2个汉堡,2个面和一个饮料。我不确定如何设计数据库以满足此业务规则。

还有一些MenuItems的其他细节(如变体,选项等),但我在这个问题中省略了它们,只是为了让它易于理解。

我正在寻找可以处理这种情况的实体和关系。

目标是能够在数据库中创建新的组合交易,并将它们呈现在动态菜单页面中,最终目标是创建一个处理该菜单中订购的购物车。

1 个答案:

答案 0 :(得分:0)

你可以有一个单独的餐桌交易表,每个餐点交易都有一个唯一的ID来识别该餐饮交易,价格和可以进入该餐饮交易的项目列表,你甚至可以将它们分开来他们的课程类型 - 主要,侧面,饮料等,并用逗号存储,','或管道' |'分开的清单。然后你有一个聪明的小查询查询,以确定所选项目是否是餐饮交易的一部分。

例如, ID:1,价格:3.50,MainIDs:1 | 7 | 14 | 15 | 16 | 19,SideIDs:4 | 5 | 7 | 11,DrinkIDs:5 | 6 | 7

然后,例如,客户将主要1,第4面和饮料5添加到他们的购物篮中,您的查询会执行查找以返回包含该项组合的所有餐饮交易ID(和价格)。

希望我能正确理解你的问题,我希望这会有所帮助。