SQL - 使单行对每个不同的FK具有不同的值

时间:2017-03-20 19:26:24

标签: mysql sql phpmyadmin

所以基本上(如果标题不清楚),我有一个食谱数据库,其中包含下图中的表格。

现在,有一件事困扰我,例如 - 我在 RECIPE 表中有煎蛋食谱和煎饼配方,并且需要 INGREDIENTS 表中的成分,所以这就是问题 - 这两个食谱都需要鸡蛋,但煎蛋卷可能需要4个鸡蛋(数量实际上是数据库中的克数,大约200克),煎饼可能需要3个鸡蛋(150克)。

如何使每个食谱中含有鸡蛋的行具有不同的值?在 INGREDIENTS 表中多次添加鸡蛋并具有不同的值将无法正常工作,因为它不会被规范化。我与一个名为 QUANTITY 的表格建立了多对多的关系,并输入了一些值,如100g,200g,300g但仍然,它不起作用,因为我只能将鸡蛋连接到一个值。

希望你理解,哈哈

提前致谢!

DATABASE RELATIONS

4 个答案:

答案 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 - 单位名称

这将允许您指定每个配方,使用哪些成分,数量,以及相关的测量单位:面粉(克),牛奶(千升),鸡蛋等等。您可以计算通过将每单位价值乘以数量来计算营养价值。

我希望你能自己解决这些问题。