5 database data-modeling sql-server-2008
我正在尝试设计一个"食谱盒"数据库,但我无法正确使用它.我不知道我是否走在正确的轨道上,但这就是我所拥有的.
食谱(recipeID等)
成分(成分
ID 等)recipeIngredient(recipeID,ingredientID,amount)
category(categoryID,name)
recipeCategory(recipeID,categoryID,name等)
所以我有几个问题.
谢谢您的帮助.
一些想法:
您可能希望对配方和成分使用相同的表,并带有类型指示符列。原因是食谱可以包含子食谱。我们将组合表称为“Item”。那么你的 RecipeIngredient 表看起来像
RecipeIngredient (RecipeId, ItemId, Amount).
Run Code Online (Sandbox Code Playgroud)
我希望该表还有一个排序列。
如果您想对这些配方进行任何计算(例如,缩放、营养分析、生产计划),那么您的数量将需要指定计量单位。您可以明确地执行此操作(通过为 uofm 设置单独的列),也可以使用文本字段表示数量并期望用户输入“1 杯”或“2 汤匙”等值。如果您采用这种方法,则需要确保它们输入的内容是可识别的,并在每次需要使用时对其进行解析。这可能会变得令人惊讶的复杂,特别是如果您想以形式化的方式表示配方产量。
假设您想要从食谱到类别 1:M,我仍然不确定为什么您的 RecipeCategory 表会有一个名称列。我认为该名称来自类别定义。
我同意戴夫的观点,即您不太可能重复使用从一个菜谱到另一个菜谱的准备步骤,因此 RecipePreparationSteps 表(或类似的表)会更合适。
然而,食谱中的成分和说明常常混合在一起。例如。
介绍文字一些成分。准备说明一些更多成分烘焙说明。
为了适应这一点,您需要巧妙地在 RecipeIngredient 和 RecipePreparation 步骤表中设置排序值,以便您可以按正确的顺序组合两者的数据进行演示。另一种方法是使用“RecipeLine”表来代替这两个表,这样每一行都可以代表一条指令或一种成分。我想这可能就是你所建议的。纯粹主义者会对这种表超载感到不满,但我不是纯粹主义者。
这是我碰巧知道很多的话题,所以有什么问题就问吧。