2013-01-23 37 views
2

我已经开始创建一个关系数据库,其中将包含我们在现代烹饪中使用的所有基本成分。正如你所想象的那样,将会有成千上万的物品。我没有太多的SQL经验,所以我很难找到一种看似有效的存储配料的方式。 如果你去这里http://en.wikipedia.org/wiki/Outline_of_food_preparation#General_ingredients你可以看到我目前正在试图放入我的数据库的列表。什么是更好的方式来创建我的食物数据库?

我的数据库目前有一个表的每个主要和子类别的食品前。一张谷物桌和一张小麦桌。起初,这似乎是可以做到的,但后来我意识到将会有数十个子类别。对于该wiki列表中的每个项目,我都必须创建更多的表格和更多的表格。我觉得这些表格太多会让我的项目非常低效。有没有更好的方式来创建我的数据库?还是我在正确的轨道上?这里是列在我的表的例子:将一个外键无论父表是

id INT(11),name VARCHAR(45),parent INT(11),img VARCHAR(45),desc VARCHAR(45) 

父INT(11),所以我想他们都将连接这种方式。 任何建议表示赞赏! 〜感谢

+0

我觉得这个论坛太宽泛了......但是你处于错误的轨道上。每种食物都应该有一个ROW--而不是TABLE。 – Randy

+0

是的,它有点宽泛,但我一直在寻找帮助困难。所以如果我把这些分类放在一行中,我会如何插入这些成分? – 88jayto

+0

题目是NORMALIZATION。你应该研究一下。根据NOUNS考虑可能会有所帮助 - 因此对于您的示例成分,CATEGORY,DISH将成为很好的候选人。那么你会在两者之间的关联表中显示哪些食材用于哪些菜肴等。hth – Randy

回答

1

我首先不建议存储所有这些在不同的表 - 它会推动你疯了:-)

相反不过,我觉得你有2种选择。

选项1(邻接表模型) - 考虑使用单一Foods表,与FoodIdFoodNameParentFoodId,您要保存AnyOtherAttributes。这是存储数据的最简单方法,但返回结果可能会稍微麻烦一些,因为您需要多次加入同一个表以返回关卡。

选项2(嵌套集模型) - 该选项仍然会有单个Foods表,但是您没有ParentFoodId,您有2列,left_index和right_index。起初这可能有点复杂,但如果你有几个未知的嵌套的父 - 子关系可以更容易地查询。

看看这篇文章的一些进一步的解释:

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

好运。

+0

这非常聪明!从来不会猜测这是应该如何完成的。创建你自己的索引是我想要的方式。我会尝试嵌套模型。谢谢!!! – 88jayto

相关问题