【问题标题】:Designing database for storing food recipes设计用于存储食物食谱的数据库
【发布时间】:2014-09-28 23:34:59
【问题描述】:

我想创建一个搜索食谱的应用程序,并打算在下面创建 3 个表格:

  • 食谱(recipeID,recipeName)。
  • 成分(成分 ID,成分名称)。
  • Recipe_ingredients(recipeID,ingredientsID, amount)

    我的问题是在这种情况下,如果我有 100 个食谱,那么我需要创建 100 个 recipe_ingredients 表,对吗?另一方面,总的来说,我必须创建一个食谱表、1 个成分表和 100 个 recipe_ingredients 表,对吗?或者我只需要制作一个很长的recipe_ingredients 包括所有100个食谱?我知道这个问题可能听起来很傻,但我对数据库世界很陌生。有什么帮助吗?

【问题讨论】:

  • 为什么 100 recipe_ingredients 你应该只需要一个 recipe_ingredients 表。
  • 欢迎来到数据库设计的世界。请注意TablesRecords 的区别。 100 个配方将在配方表中产生 100 条记录。如果他们使用 100 种成分,这将在成分表中产生 100 条记录。您的关系表Recipes-Ingredients 将有多少条记录?这将取决于有多少食谱使用每种成分。那会有所不同!不过,不确定设计:您也需要数量和说明,对吧?

标签: c# sql-server database-design


【解决方案1】:

您总共需要 3 张桌子:

  1. 食谱
  2. 成分
  3. Recipe_Ingredients。

在您当前的设计中,您只需将数据添加到数据库中;不需要 100 个表。我觉得可能对table这个词有误解。

存储数据的表。所以在食谱中你会存储一个RecipeID 和它对应的recipeName。

对于 recipe_ingredients,您只需将配方和您选择的成分联系起来。无需为此创建 100 个表。只需将数据添加到您的单个表中即可。

示例:假设您有一个包含 5 种成分的食谱:RecipeID = 1; IngredientID = 1 到 5。您必须在 recipe_ingredientstable 中添加与 recipeID 的连接的每种成分。

以下条目将在此表中:

PrimaryKey --- RecipeID --- IngredientID
1 --- 1 --- 1
2 --- 1 --- 2
3 --- 1 --- 3
4 --- 1 --- 4
5 --- 1 --- 5

请注意,PrimaryKey 用于区分此表中的每个条目。

如果您想要 ID 为 1 的配方的所有成分;您可以通过为 RecipeID 1 选择所有成分 ID 来查询此内容,然后从您的成分表中加入成分名称。

另一方面,您可能还想重新考虑您的姓名。看这里:Table Naming Dilemma: Singular vs. Plural Names

【讨论】:

  • 太棒了,非常感谢您的详尽解释,它确实澄清了我的困惑。我还有一个问题,如果我想为每种成分添加数量,我应该将它直接添加到recipe_ingredients表的每条记录中吗?换句话说,我应该在该表上为金额创建另一列吗?我已经标记了你的答案,但我没有足够的声誉来投票。对此感到抱歉。
  • @MinhNguyen:没问题!很高兴我能帮忙:)
  • 理论上关系表应该只包含键。但理论就是这样。是的,我认为将数量添加到关系中很好。
  • 是的,将金额添加到 recipe_ingredients 表是完全可以的。这是食谱与成分结合在一起的地方。将它们放在那个位置实际上是有意义的。
【解决方案2】:
i think you only need two tables here.
  1. 配方 - 配方 ID、名称等...
  2. 配料 - 配料 ID、配方 ID(参考收据表)、名称、金额

【讨论】:

  • 我想要第三张表,因为我需要在每个食谱中添加每种成分的数量。多个食谱可以使用相同的成分,但用量不同。
  • 我认为您不需要第三张桌子。在成分表中,您已经有了成分 ID、RecipeID - 它将唯一地标识成分 ID 与相应的金额以及对应的配方 ID。
  • 可能有一些成分,比如盐,你需要不止一个食谱,你不觉得吗?
  • 当然,这就是桌子设计的原因。我将编辑我的帖子以说明我的意思。
  • 那么您会将每种单独的成分存储在哪里?
【解决方案3】:

我认为这会对你有所帮助,两张桌子就可以完成这项工作

recpies (recpieID, IngredientID)
Ingredient (IngrdientID , IngrdientName , Amount )

让事情变得简单像这样插入 例如我有食谱:

recipe name : cake  
ingredients : sugar = 1 kg
              color = 100 gm
              soda  = 500 gm

因此,当您将多种成分插入成分表时,请保持相同的成分 ID 即,如果我们将蛋糕食谱插入桌子,它会像这样

recpies(1,0001)   // some random unique ID
ingredient (0001 , sugar , 1 kg )
           (0001 , color , 100 gm)
           (0001 , soda  , 500 gm )

【讨论】:

  • 这不是我的意思:每个食谱都包含不止一种成分,希望......
猜你喜欢
  • 2011-03-14
  • 2011-06-23
  • 1970-01-01
  • 2017-08-13
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
相关资源
最近更新 更多