食物食谱数据库建模

5 database data-modeling sql-server-2008

我正在尝试设计一个"食谱盒"数据库,但我无法正确使用它.我不知道我是否走在正确的轨道上,但这就是我所拥有的.

食谱(recipeID等)
成分(成分
ID 等)recipeIngredient(recipeID,ingredientID,amount)
category(categoryID,name)
recipeCategory(recipeID,categoryID,name等)

所以我有几个问题.

  • 我到目前为止怎么样?你知道的这个设计还可以吗?
  • 我该如何实施准备步骤?我应该创建一个额外的多对多实现(例如准备(prepID等)和recipePrep(recipeID,prepID))或只是在配方表中添加方向?我希望这是UI(网页)中的有序列表.

谢谢您的帮助.

Elr*_*ynn 1

一些想法:

您可能希望对配方和成分使用相同的表,并带有类型指示符列。原因是食谱可以包含子食谱。我们将组合表称为“Item”。那么你的 RecipeIngredient 表看起来像

 RecipeIngredient (RecipeId, ItemId, Amount).  
Run Code Online (Sandbox Code Playgroud)

我希望该表还有一个排序列。

如果您想对这些配方进行任何计算(例如,缩放、营养分析、生产计划),那么您的数量将需要指定计量单位。您可以明确地执行此操作(通过为 uofm 设置单独的列),也可以使用文本字段表示数量并期望用户输入“1 杯”或“2 汤匙”等值。如果您采用这种方法,则需要确保它们输入的内容是可识别的,并在每次需要使用时对其进行解析。这可能会变得令人惊讶的复杂,特别是如果您想以形式化的方式表示配方产量。

假设您想要从食谱到类别 1:M,我仍然不确定为什么您的 RecipeCategory 表会有一个名称列。我认为该名称来自类别定义。

我同意戴夫的观点,即您不太可能重复使用从一个菜谱到另一个菜谱的准备步骤,因此 RecipePreparationSteps 表(或类似的表)会更合适。

然而,食谱中的成分和说明常常混合在一起。例如。

介绍文字一些成分。准备说明一些更多成分烘焙说明。

为了适应这一点,您需要巧妙地在 RecipeIngredient 和 RecipePreparation 步骤表中设置排序值,以便您可以按正确的顺序组合两者的数据进行演示。另一种方法是使用“RecipeLine”表来代替这两个表,这样每一行都可以代表一条指令或一种成分。我想这可能就是你所建议的。纯粹主义者会对这种表超载感到不满,但我不是纯粹主义者。

这是我碰巧知道很多的话题,所以有什么问题就问吧。