食物食谱数据库建模

时间:2011-02-09 02:45:06

标签: database sql-server-2008 data-modeling

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

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

所以我有几个问题。

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您是否查看过任何现有架构,例如DatabaseAnswers上的this one

答案 1 :(得分:1)

一些想法:

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

 RecipeIngredient (RecipeId, ItemId, Amount).  

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

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

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

我同意Dave的说法,你不太可能重复从配方到配方的准备步骤,因此RecipePreparationSteps表(或类似的东西)会更合适。

然而,食谱通常会与成分和指示混合在一起。例如

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

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

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

答案 2 :(得分:0)

看起来是一个好的开始。一些想法:

  1. 看不到需要recpieCategory表。食谱和类别之间的一对多应该没问题。
  2. 每个食谱的PreparationSteps表应包含1-n个步骤。我不会尝试重复配方之间的步骤。