饮食数据库模型

时间:2014-02-23 22:19:43

标签: mysql sql erd

我对我正在尝试设计的数据库有疑问,我也想提一下我是初学者,所以请记住这一点。

因此,我正在设计的数据库将用于我正在为学校项目开发的应用程序。该应用程序将是一个健身应用程序,具有许多功能,但主要重点是基于用户提供的一些信息创建饮食。所有产生这种饮食的数据都将来自DB,如食物及其营养素等。

我想要构建这种饮食的方式是,它将创造一个为期7天的样本饮食。每天将有5餐,每餐含有多种产品,例如100克鸡胸肉,100克糙米,100克西兰花。

我已经制作了一张ERD图来帮助我建模,您可以在以下链接中看到

http://imgur.com/0ivcM5x

正如你从图片中看到的那样,我创造了食物餐桌,它可以容纳所有可以用来制作餐食的食品,这就是我被卡住的地方。在我的模型中,我将其分解为单独的表格,但我不知道这是否正确并且可行。

我也不确定如何创建“MealTable”到目前为止我已经将meal_id作为PK而food_id作为FK但是我能够创建带有多种食物的膳食或者它将是1餐1 “食物”表中的项目。

类似于“DietTable”和“dayOfTheWeek”我试图在这里采取类似的方法,所以我有diet_id作为PK和day_id作为FK,但这将允许我在同一饮食中有多个“日”实例。

我知道这些问题并不是特定的,但我只想了解如何对此进行建模,以及这种方法是否正确。它是否有效,是否有其他替代方法来模拟类似的问题。

任何帮助或建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为你的ERD图看起来很不错,但我注意到了几件事:

  • 看起来您的MealTable餐桌每餐会有多行,所以我会将其重命名为MealFood以列出每餐中的所有食品。如果您需要为每顿饭添加字段(例如用餐名称),那么请创建一个名为Meal的单独表格,每餐只有一行
  • 我会从day_id中移除DietTable,而在diet_id表格中有一个dayOfTheWeek列。如果您将其与mealOfTheDay列配对,则可以在diet_id, day_id, mealOfTheDay之间创建一个唯一键,以确保每种膳食每天只能吃一顿饭

示例dayOfTheWeek表:

| diet_id | day_id | mealOfTheDay | meal_id |
---------------------------------------------
| 1       | 1      | 1            | 999     |
| 1       | 1      | 2            | 642     |
| 1       | 1      | 3            | 242     |
| 1       | 1      | 4            | 298     |
| 1       | 1      | 5            | 322     |
| 1       | 1      | 5            | 111     |  <- Unique key will not allow 
                                                  this row as it's the second 
                                                  fifth meal on same day for 
                                                  diet 1
  • 另外,尽量让你的命名保持一致。你们中的一些表名以Table结尾,而有些则没有。

答案 1 :(得分:0)

我一直在寻找你的数据库模型,有些东西是缺失的,还有一些需要改变(我的意见)。我已经设计了一个类似的模型,不是为了健身,但是我需要跟进膳食蛋白质来治疗PKU病。你的最终模型(我认为)真的比我设计的更接近:

以下是表格列表: 食物:正如你所做的那样,除了在我的情况下,我用它来描述100克这种食物的蛋白质。 FOOD_UNIT:质量单位(mg,g,...,Kg),体积(ml,cl,...,L) FOOD_CATEGORY:蔬菜,水果...... 日历:日期,日复一日...我认为它比使用简单的星期ID和餐饮ID更有用。如果soneine在星期一和另一个星期五开始饮食,他们会吃同一餐,但事实上第一个人可能比另一个人需要更多或更少的食物。实际上你有一个很大的问题。 MEAL_PERIOD:早上好,......晚上。在这里使用时间有助于确保在清晨或午餐附近吃饭 人:你正在编辑这顿饭的人。有几个人需要不同的蛋白质,脂肪,... MEAL:我想你知道放在这里的东西(person_id上的主键,calendar_id,meal_period_id)。在此表中添加所有食物和数量。不要忘记在food_unit_id上添加外键,在你的情况下你的diet_id

现在无法绘制架构,但通常您可以使用所有元素绘制一个通常符合您需求的酷图。