【问题标题】:What would be a better way to create my database of food? [closed]有什么更好的方法来创建我的食物数据库? [关闭]
【发布时间】:2013-01-07 08:32:27
【问题描述】:

我承担了创建一个关系数据库的项目,该数据库将包含我们在现代烹饪中使用的所有基本成分。正如您可以想象的那样,将有数千个项目。我没有太多的 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)

parent INT(11) 将是任何父表的外键,所以我认为它们都会以这种方式连接。 任何建议表示赞赏! ~谢谢

【问题讨论】:

  • 我认为论坛的范围太广了...但是您走错了路。每种食物都应该有一个 ROW,而不是 TABLE。
  • 是的,它有点宽泛,但我一直很难找到帮助。那么如果我将类别放在行中,我将如何插入成分?
  • 主题是标准化。你应该研究一下。用名词来思考可能会有所帮助-因此对于您的示例,成分、类别、菜肴将是很好的候选表。然后您将在两者之间有关联表,以显示在哪些菜肴中使用了哪些成分等。hth

标签: sql normalize


【解决方案1】:

我首先不建议将所有这些存储在单独的表中——它会让你发疯 :-)

但是,我认为您有 2 个选项。

选项 1(邻接列表模型)- 考虑使用单个 Foods 表,其中包含您希望存储的 FoodIdFoodNameParentFoodId、AnyOtherAttributes。这是存储数据最简单的方法,但返回结果可能会有点麻烦,因为您需要多次加入同一个表才能返回级别。

选项 2(嵌套集模型)- 此选项仍将具有单个 Foods 表,但您将拥有 2 列 left_index 和 right_index,而不是 ParentFoodId。起初这可能有点复杂,但如果您有几个未知的嵌套父子关系,则更容易查询。

查看这篇文章以获得更多解释:

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

祝你好运。

【讨论】:

  • 这很聪明!永远不会猜到这就是它应该如何完成的。我想创建自己的索引是要走的路。我将尝试嵌套模型。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
相关资源
最近更新 更多