【问题标题】:Meals and products - flexible design膳食和产品 - 灵活的设计
【发布时间】:2017-12-17 16:22:00
【问题描述】:

我正在尝试学习 SQL 和实体框架,为此我想创建一个帮助管理膳食的应用程序,但我无法为我的实体进行灵活的设计。我曾考虑将有关产品及其每 100 克的营养特性的信息存储在名为 Products 的表中。问题是用户应该能够选择产品(从产品表中),然后设置吃的数量并将其添加到他们的膳食中。因此,用户应该在膳食计划中看到具有适当乘以给定数量的营养特性的产品。

例子:

1.给定产品记录:{ProductID:1,名称:“鸡”,数量:100,千卡:99,蛋白质:20,碳水化合物:0,脂肪:1.3}

2.用户:吃了250克鸡肉。

3.输出: {MealID:1,

ProductID:1,数量:250,千卡:247.5,蛋白质:50,碳水化合物:0 , 脂肪: 3.25,

其他产品...}

我不知道我是否应该创建另一个表来存储具有用户定义数量的那些产品,或者我应该根据这个数量和产品记录以某种方式计算它。我知道我们不应该存储重复项,因此拥有另一个表的想法似乎很糟糕。我将不胜感激。

【问题讨论】:

    标签: sql database-design


    【解决方案1】:

    虽然营养价值与产品直接相关,但我会将营养信息分开到自己的表格中,每个营养价值都作为自己的记录(而不是列)。

    Product:
    ProductID
    ProductDescription
    
    Nutrition:
    NutritionID
    NutritionDescription
    
    NutritionValues:
    ProductID
    NutrionID
    ValuePer100Grams
    

    这允许您在不更改架构的情况下为产品添加新的营养值,因为它只是在 Nutrition 和 NutritionValues 表中添加另一条记录,并且不要求每个产品都有每个营养属性的值输入.

    我还推荐一个 ServingSize 表,该表确定产品将份量转换为 100 克的乘数。

    ServingSize:
    ProductID
    GramsPerServing
    

    这将允许您的用户灵活地输入食物的数量(一片面包),然后您为他们处理转换为克的问题。

    【讨论】:

    • 因此,您的设计示例如下所示: Product{ProductID:1, ProductDescription: "Chicken"}, Nutrition {NutritionID: 1, NutritionDescription: Protein} NutritionValues{ProductID: 1, NutritionID : 1, ValuePer100Grams: 20}?
    • @Donios 是的。这将使添加新营养素变得容易,并且也不需要为每种可能的营养素提供价值。如果您不知道鸡肉有多少锌,您不必输入。或者,如果您知道西兰花含有 0 克饱和脂肪,您可以将其输入为 0 作为值,或者您不能为该条目输入饱和脂肪。这取决于你。
    • 要捕获这顿饭,您可以将用户 ID 与产品 ID 和吃掉的克数组合到一个膳食表中。您消耗的营养价值将是 (ValuePer100Grams/100.0 * GramsEaten) 按营养、产品、用户分组
    • 好的,我现在明白了,你已经解释得很清楚了。非常感谢!
    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2021-10-26
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多