Sql 为膳食/食谱/食品数据库建模
我正在尝试对包含以下表的数据库建模:Sql 为膳食/食谱/食品数据库建模,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试对包含以下表的数据库建模: Meals (MealId) MealRecipes (MealId, RecipeId) MealFoods (MealId, FoodId) Recipes (RecipeId) RecipeFoods (RecipeId, FoodId) Foods (FoodId) 食谱由N种食物组成(苹果、鲑鱼等) 但是当我做一顿饭的时候,它可以包含食谱(蔬菜沙拉)和食物(苹果) 我最大的问题是如何用食谱和食物来制作这顿饭 更新 一件重要的事情是食谱/食物在一
Meals (MealId)
MealRecipes (MealId, RecipeId)
MealFoods (MealId, FoodId)
Recipes (RecipeId)
RecipeFoods (RecipeId, FoodId)
Foods (FoodId)
食谱由N种食物组成(苹果、鲑鱼等)
但是当我做一顿饭的时候,它可以包含食谱(蔬菜沙拉)和食物(苹果)
我最大的问题是如何用食谱和食物来制作这顿饭
更新一件重要的事情是食谱/食物在一餐中的顺序。因此,另一种方法是:
Meals (MealId)
MealSteps (MealId, StepNumber, RecipeId, FoodId)
其中RecipeId或FoodId中的任何一个都可以为null。但不是两者都有 您的解决方案看起来不错。一餐由不同的菜肴(如主菜一份,沙拉一份)和单一食物(如甜点一个苹果)组成 另一种建模方法是放下餐桌上的
MealFoods
,改为制作一种食物。(例如,苹果本身就是简单甜点的“配方”,而盐则不是。)
因此,使用这种模式,你甚至可以防止一些食物添加到一餐中。你也可以在你的模型中的Foods
中添加一个标志,这样就可以将苹果添加到一餐中,而不必添加盐。但这将取决于你在插入<代码> MealFoods < /代码>时考虑旗,而在第二个模型中,你只能在食谱中添加食谱,这使得这个更安全。< /P>
更新:以下是建议的模型。你看,我只搬了一张桌子。(我把你在你的更新中添加的位置放进去)。诀窍在于你建立了一些“食谱”,它们在RecipeFoods
中只有一个条目,例如苹果
- 膳食(MealId)
- 测量规格(测量、往复、位置)
- 食谱(RecipeId)
- RecipeFoods(RecipeId,FoodId)
- 食物(食物)
- 您的解决方案看起来不错。一餐由不同的菜肴(如主菜一份,沙拉一份)和单一食物(如甜点一个苹果)组成
另一种建模方法是放下餐桌上的
MealFoods
,改为制作一种食物。(例如,苹果本身就是简单甜点的“配方”,而盐则不是。)
因此,使用这种模式,你甚至可以防止一些食物添加到一餐中。你也可以在你的模型中的Foods
中添加一个标志,这样就可以将苹果添加到一餐中,而不必添加盐。但这将取决于你在插入<代码> MealFoods < /代码>时考虑旗,而在第二个模型中,你只能在食谱中添加食谱,这使得这个更安全。< /P>
更新:以下是建议的模型。你看,我只搬了一张桌子。(我把你在你的更新中添加的位置放进去)。诀窍在于你建立了一些“食谱”,它们在RecipeFoods
中只有一个条目,例如苹果
- 膳食(MealId)
- 测量规格(测量、往复、位置)
- 食谱(RecipeId)
- RecipeFoods(RecipeId,FoodId)
- 食物(食物)
如果这是真的,你的第二个数据模型似乎不错——但是你必须考虑如何在你的数据库中建模继承——一个配方和一个配料可以组成一个课程。 对于这个问题并没有单一的最佳解决方案,但您会发现许多关于堆栈溢出的解决方案可以提供帮助
<>最后,你可能想考虑一个课程是由几个配料或配方一起组成的,例如汤和面包。 < P>我认为你有两个相关的问题,这可能有助于你用半正式语言来指定业务领域。 我认为它是这样的: 这个系统有很多餐 一顿饭由一个……n道菜组成,按顺序排列 一道菜是一种配料或一种食谱 食谱由1..n种成分(大概还有说明)组成
如果这是真的,你的第二个数据模型似乎不错——但是你必须考虑如何在你的数据库中建模继承——一个配方和一个配料可以组成一个课程。 对于这个问题并没有单一的最佳解决方案,但您会发现许多关于堆栈溢出的解决方案可以提供帮助
最后,你可能想考虑一道菜是由几种配料或配方一起组成的,例如汤和面包。好像你已经做过了…或者我不理解这个问题,不太明白这个问题是什么。你建议的表格看起来很合理。我添加了一个更新,我正在考虑另一种方法……我的主要问题是如何用两种不同类型的食谱和食物(来自不同的表格)制作一顿饭但我可能想补充一些额外的信息,说明两者是如何结合在一起的,比如位置……一顿饭将由食物组成,食谱也将由食物组成,如果一顿饭只有一个RecipeID,那么这顿饭仍然包含食物。然而,如果一顿饭中需要一种以上的食物,那么可以将其捆绑在食谱中。看起来你已经这样做了。。。或者我不理解这个问题,不太明白这个问题是什么。你建议的表格看起来很合理。我添加了一个更新,我正在考虑另一种方法……我的主要问题是如何用两种不同类型的食谱和食物(来自不同的表格)制作一顿饭但我可能想补充一些额外的信息,说明两者是如何结合在一起的,比如位置……一顿饭是由食物组成的,食谱也是由食物组成的