所以基本上(如果标题不清楚),我有一个食谱数据库,其中包含下图中的表格。
现在,有一件事困扰我,例如 - 我在 RECIPE 表中有煎蛋食谱和煎饼配方,并且需要 INGREDIENTS 表中的成分,所以这就是问题 - 这两个食谱都需要鸡蛋,但煎蛋卷可能需要4个鸡蛋(数量实际上是数据库中的克数,大约200克),煎饼可能需要3个鸡蛋(150克)。
如何使每个食谱中含有鸡蛋的行具有不同的值?在 INGREDIENTS 表中多次添加鸡蛋并具有不同的值将无法正常工作,因为它不会被规范化。我与一个名为 QUANTITY 的表格建立了多对多的关系,并输入了一些值,如100g,200g,300g但仍然,它不起作用,因为我只能将鸡蛋连接到一个值。
希望你理解,哈哈
提前致谢!
答案 0 :(得分:0)
对我而言似乎关系不正确。
由于数量是食谱中含有的成分的特征,因此#34;最好的方法是删除Quantity
表并使其成为Have
表的属性。然后卡路里将是Ingredients
的属性,与每100克卡路里一样。
架构将是:
食谱:id_recipe,名称
有:id_recipe,id_ingredient,数量
成分:id_ingredient,名称,卡路里
您可以使用以下方式查询配方和数量:
SELECT *, Have.Quantity * Ingredient.calories as total_calories
FROM Recipe
LEFT JOIN Have ON Recipe.id_recipe = Have.id_recipe
LEFT JOIN Ingredient ON Ingredient.id_ingredient = Have.id_ingredient;
答案 1 :(得分:0)
您需要一张表INGREDIENT_QTY
RECIPE: recipe_id, ingredient_id FK --> INGREDIENTS(ingredient_id)
INGREDIENT_QTY: recipe_id, ingredient_id, QTY FK --> RECIPE (recipe_id, ingredient_id)
如果您需要食谱卡路里,您需要创建一个计算列以从INGREDIENT_QTY
获取该值
答案 2 :(得分:0)
这样的事情应该为你提供最低限度。
有了这个,我认为您可以安全地删除这些表格(根据您的图片): HAVE & 包含&的 QUANTITY 强>
Table Recipes
[Id] [int] NOT NULL
,[Recipe] [VARCHAR] (50) NOT NULL
Table Ingredients
[Id] [int] NOT NULL
,[Ingredient] [VARCHAR] (50) NOT NULL
,[GramWeight] [int] NOT NULL
Table RecipeIngredients
[RecipeId] [int] NOT NULL
,[IngredientId] [int] NOT NULL
,[Quantity] [int] NOT NULL
答案 3 :(得分:0)
我建议如下表格:
食谱或多或少
带有字段的食谱成分:
recipeID - 与表格食谱相关联 ingredientID - 与表格成分相关联 数量 - 保存数量
成分,列出可用于食谱的所有潜在成分。这有一个额外的好处,你可以保持营养价值!使用字段:
ID - 成分的标识符(整数)
ingredient_name
ingredient_kcal_per_unit - &脂肪,碳水化合物,蛋白质等其他类似领域
unitID - 保存度量单位的标识符
单位用于保存所有相关的度量单位,例如克,毫升,碎片等字段:
ID - 单位的标识符(整数)
unit_name - 单位名称
这将允许您指定每个配方,使用哪些成分,数量,以及相关的测量单位:面粉(克),牛奶(千升),鸡蛋等等。您可以计算通过将每单位价值乘以数量来计算营养价值。
我希望你能自己解决这些问题。