自定义方案的数据库表设计

时间:2016-02-22 17:59:47

标签: sql database postgresql database-schema lookup-tables

我正在尝试设计一个数据库,为不同的人存储一个(或多个)膳食计划。这个问题有两种不同的场景。

第一种情景:

(请参阅图片)enter image description here

共有4个表:PERSON,MEALPLAN,MEALPLAN_FOOD和FOOD。 PERSON表存储每个拥有膳食计划的个人的基本信息。 MEALPLAN表将跟踪每个膳食计划(饮食)。 FOOD表是不同食物(例如鸡蛋,菠菜,甘薯,燕麦片等)的表格,并存储每个数量单位的蛋白质/碳水化合物/脂肪/卡路里信息。 (例如1杯)每种食物。 MEALPLAN_FOOD表用作MEALPLAN和FOOD的查找/关联表。

我相信我已正确设置这些表格。每个人都有一个(或多个)膳食计划。每餐计划包含一种(或多种)食物/数量。我的问题出现在下一个场景中。

第二种情景:

(请参阅图片)enter image description here

第一种情况是有限的,因为它只存储每餐计划的食物清单。在第二种情况下,我们希望合并其他表格,以便按膳食分解和存储膳食计划。每个人将有一个(或多个)膳食计划,每餐计划1到4顿饭(膳食计划可能只包括2或3顿饭)。为了实现这一点,第一个场景的MEALPLAN_FOOD查找/关联表被替换为2个查找/关联表(MEALPLAN_M<#>和<#> _FOOD)和餐桌(用餐1的M1, M2,M3和M4)。

问题:假设第一个场景的设计是正确的,第二个场景的设计在完成附加功能时是否正确?这个设计在其他查询表中是否正确,以便允许每人每餐计划食物储存?或者,有没有更好的方法/设计来完成这项任务?

谢谢!

1 个答案:

答案 0 :(得分:3)

通常不是每个实体都有一张桌子的好主意(即每个膳食计划/一天的餐桌)。相反,更改您的原始设计 - 在MEALPLAN表上添加另一列,该外键到名为MEALOFDAY的新表。这样,您可以添加或删除当天的餐食(允许用户每天吃6或10餐),如果您为{{{{{{{{{{{{{{{{{{{{{{{ 1}}。

MEALPLAN和MEALOFDAY的新表格结构如下:

MEALPLAN_MEALOFDAY

或者,摆脱MEALPLAN ======== mealplan_id (pk) date notes person_id (fk) mealofday_id (fk) MEALOFDAY ========= mealofday_id (pk) meal_number meal_description 上的mealofday_id并创建另一个表,如下所示:

MEALPLAN
相关问题