食谱数据库设计建议

时间:2011-02-27 12:40:31

标签: sql database database-design

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

现在我需要从Spices,Meats,Veggies获取数据并在Recipes表中创建配方。我的问题是如何将所有这些都映射到食谱中,考虑到一个食谱可以有更多的蔬菜,更多类型的满足和更多的香料。

感谢。

5 个答案:

答案 0 :(得分:8)

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

enter image description here

如果由于某种原因您觉得每种成分都需要自己的表,因为它们有不同的列,那么请使用此模型。将所有常用列保留在Ingredient表中。

enter image description here

答案 1 :(得分:4)

在我看来,你在谈论一个与n-m的关系:

  • 食谱可以有很多香料/肉类 /蔬菜
  • 香料/肉类/蔬菜中的每一种 可以与很多食谱联系在一起。

您通常将其存储在数据库中的方式是使用Recipe和Veggies之间的关联表。

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

配方和蔬菜必须各有一个唯一的主键(id),表RecipeVeggies存储两个主键,以创建两者之间的关联。

这是一个小结构示例:

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

RecipeVeggies表创建存储配方和素食之间的关系。

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

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

答案 2 :(得分:1)

这就是我要做的事。

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

正如此link中的示例所示,您的层次结构顶部有一个表,对于您的系统,我称之为成分,然后将素食/肉类/香料作为子表。然后我会创建一个名为Recipe的表,它与成分表有一对多的关系。

我希望您使用ORM,这样可以节省大量的时间,并且可以减少错误。

感谢您提出这个有趣的问题,它有一个更主观的设计类型问题,以获得创意果汁。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你有一个所谓的n:m食谱和配料之间的关系。在关系数据库中解决此问题的常用方法是引入映射表。

假设您的每个食谱都有一个id(RecipeID),每个成分也有一个id(IngredientID)。然后,您创建一个包含RecipeID列和IngredientID列的新表。此表中的每条记录都将一种成分映射到配方,反之亦然。

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