2011-02-27 138 views
4

我在设计我的数据库时遇到问题。 我必须做一个女巫包含让我们说一个食谱。 我有包含让我们说的表:香料,肉类,蔬菜。食谱数据库设计建议

好吧,现在我需要从香料,肉类,蔬菜中获取数据,并在食谱表中创建食谱。我的问题是如何将所有这些映射到食谱中,因为一种食谱可以有更多的蔬菜,更多类型的见面和更多的香料。

谢谢。

+3

这功课吗? – 2011-02-27 12:42:16

+0

不,这不是家庭作业,只是我想要一些建议的个人项目。 – 2012-01-31 19:25:22

回答

8

肉,蔬菜和香料是成分IngredientType(M,V,S)用于识别每个组。

enter image description here

如果由于某种原因你觉得每种成分都需要自己的表,因为他们有不同的列,然后使用此模式。保留Ingredient表中的所有常用列。

enter image description here

+0

非常感谢您的解决方案......另一个问题是如果我实现了将自己的表中的成分分开的设计,我该如何添加多个翻译?你建议什么方法? – 2011-03-06 16:06:02

+0

在连接成分和成分类型的'X'中,半月的含义是什么? – Hexatonic 2016-10-28 16:50:46

+0

@Hexatonic,亚型鉴别 - 互斥。 – 2016-10-29 14:32:11

1

这是我会做的。

我会使用继承映射,每个ORM都有它,并且几乎所有的Web语言都有它(php有doctrine,java和.net有Hibernate等)。

正如link显示的示例,您的层次结构顶部有一个表格,对于您的系统,我将其称为Ingredient,然后将veggie/meat/spices作为子表格。然后,我会制作一张名为Recipe的表格,并且它与成分表格有一对多的关系。

我希望你为此使用ORM,它会为你节省一吨时间,并且会导致很少的错误。

谢谢你提出一个有趣的问题,它有一个更主观的设计类型问题来获得创造性的果汁。

0

您可以这样做..在配方表中列出食谱名称(例如x)的详细信息,该信息为配方项目的每个内容重复,然后您可以使用配方创建另一个表格项目名称和编号..在原始表中使用此编号..简而言之正常化配方表..你可以做每个成分的进一步。

0

你有一个所谓的n:m食谱和配料之间的关系。在关系数据库中解决这个问题的常用方法是引入映射表。说你的每个食谱都有一个ID(RecipeID),每个成分也有一个ID(IngredientID)。然后创建一个包含RecipeID列和IngredientID列的新表格。此表中的每条记录都将配料映射到配方,反之亦然。

如果您想进一步限定关系,这样的表格也很方便。例如,您可以在映射表中添加另一列,其中包含描述配方需要多少配料的描述。

4

在我看来,你是在谈论一个纳米关系:

  • 配方可以有很多香料/肉类 /素食者
  • 香料/肉类/蔬菜每一个 可连接到多食谱。

您通常将其存储在数据库中的方式是使用配方和例如蔬菜之间的关联表。

Recipe <----> RecipeVeggies <----> Veggies 

配方和蔬菜必须分别具有唯一的主密钥(ID)和表RecipeVeggies商店既主键,以在两个之间的关联。

这里有一个小结构示例:

Recipe : id, name, description 
Veggies : id, name 
RecipeVeggies : recipe_id, veggies_id 

的RecipeVeggies表创建商店食谱和素食之间的关系。

您必须创建类似的香料和肉类表。

我希望我很清楚,否则随时提出更多问题,我会改进我的答案。