【问题标题】:Database design for user daily food and workout table daily activity用户日常饮食和锻炼表日常活动的数据库设计
【发布时间】:2020-05-15 08:09:05
【问题描述】:

我正在构建一个同时管理食物和锻炼的应用程序。我不确定谁来存储用户的日常活动

其实我有一个餐桌食物:

id name energy proteins

餐桌餐,用于存储用某些食物制成的饭菜并存储总营养值:

id name cat total_enery total_proteins

table meal_food 用来存放餐中的食物:

meal_id food_id nb_portion

桌上锻炼:

id name type

表格练习:

id name type duration

表锻炼_练习

workout_id exercice_id

现在我的问题是如何设计一个表格来存储用户 日常活动?我需要储存食物、膳食、锻炼、锻炼

我每天都需要选择一份食物,选择一份或一份已经储存的食物,一次锻炼或锻炼。

我正在做这样的事情,但我真的不确定:

表 user_daily_activity

id day food_id meal_id food_id_portion workout_id exercice_id

尝试分组是个好主意还是我需要分开?我应该创建这样的表格以获得更多控制权吗?

user_daily_food
user_daily_meal 
user_daily_workout
user_daily_exercices

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    假设:

    • 您可以选择食物的特定部分,或锻炼的持续时间,或者从已经预定义的膳食/锻炼程序中选择一个。
    • 您有兴趣保留一天的快照,并且可以根据需要更改预定义的膳食和锻炼程序。

    那么最简单的方法是从预定义的膳食和锻炼程序中进行选择,并将结果存储在日常活动中:

    id
    day
    food_id
    food_id_portion
    exercise_id
    duration
    

    如果预定义的膳食和/或锻炼程序无法更改和/或您需要重新绑定到原始膳食/锻炼程序(即使它们可以更改),那么我认为您只剩下您提到的上述表格。为了简单/标准化,您可以单独存储结果,然后合并结果:

    select food_id, food_id portion
    from
    (
    select id, day, food_id, food_id_portion from user_daily_food 
    union all
    select id, day, food_id, nb_portion from user_daily_meal 
      inner join meals on user_daily_meal.mealid = meals.mealid
    ) A
    

    我会选择产生最少冗余的任何方法,但这取决于特定应用程序的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2017-01-09
      • 1970-01-01
      相关资源
      最近更新 更多