Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为膳食/食谱/食品数据库建模_Sql_Sql Server_Tsql - Fatal编程技术网

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)
      • 食物(食物)

      我认为您在这里有几个相关的问题-它可能有助于您用半正式语言指定业务领域

      我认为它是这样的:

      这个系统有很多餐

      一顿饭由一个……n道菜组成,按顺序排列

      一道菜是一种配料或一种食谱

      食谱由1..n种成分(大概还有说明)组成

      如果这是真的,你的第二个数据模型似乎不错——但是你必须考虑如何在你的数据库中建模继承——一个配方和一个配料可以组成一个课程。 对于这个问题并没有单一的最佳解决方案,但您会发现许多关于堆栈溢出的解决方案可以提供帮助


      <>最后,你可能想考虑一个课程是由几个配料或配方一起组成的,例如汤和面包。

      < P>我认为你有两个相关的问题,这可能有助于你用半正式语言来指定业务领域。 我认为它是这样的:

      这个系统有很多餐

      一顿饭由一个……n道菜组成,按顺序排列

      一道菜是一种配料或一种食谱

      食谱由1..n种成分(大概还有说明)组成

      如果这是真的,你的第二个数据模型似乎不错——但是你必须考虑如何在你的数据库中建模继承——一个配方和一个配料可以组成一个课程。 对于这个问题并没有单一的最佳解决方案,但您会发现许多关于堆栈溢出的解决方案可以提供帮助


      最后,你可能想考虑一道菜是由几种配料或配方一起组成的,例如汤和面包。

      好像你已经做过了…或者我不理解这个问题,不太明白这个问题是什么。你建议的表格看起来很合理。我添加了一个更新,我正在考虑另一种方法……我的主要问题是如何用两种不同类型的食谱和食物(来自不同的表格)制作一顿饭但我可能想补充一些额外的信息,说明两者是如何结合在一起的,比如位置……一顿饭将由食物组成,食谱也将由食物组成,如果一顿饭只有一个RecipeID,那么这顿饭仍然包含食物。然而,如果一顿饭中需要一种以上的食物,那么可以将其捆绑在食谱中。看起来你已经这样做了。。。或者我不理解这个问题,不太明白这个问题是什么。你建议的表格看起来很合理。我添加了一个更新,我正在考虑另一种方法……我的主要问题是如何用两种不同类型的食谱和食物(来自不同的表格)制作一顿饭但我可能想补充一些额外的信息,说明两者是如何结合在一起的,比如位置……一顿饭是由食物组成的,食谱也是由食物组成的