【问题标题】:Structuring a recipe database构建配方数据库
【发布时间】:2011-05-01 02:10:06
【问题描述】:

我正在建立一个数据库,该数据库将按成分搜索食谱。

例如,我想我打算用可接受的成分类型填充数据库,但我不想解析包含特定配方中所有成分的字符串。我正在考虑制作一个可接受成分表的列表,并以某种方式搜索它是否存在。不过,我觉得这将是一项非常繁重的操作,我希望它尽可能高效。

构造这样的东西的最佳方法是什么?我有几个想法,但它们似乎效率很低。

如果有人搜索包含黄油、蘑菇和菠菜的食谱,我希望它返回包含其中任何成分的食谱。

期待听到一些关于此的建议。

【问题讨论】:

    标签: mysql sql database search database-design


    【解决方案1】:

    这和关系数据库一样简单......

    Table One - Ingredients
    
    [ID]  [Name]  [Description?]
     1     butter   delicious cow output
     2     bread    wholegrain please
    
    Table Two - Recipe Basic Data
    
    [ID]  [RecipeTitle]  [RecipeAuthor]  [RecipeSteps] (maybe as BLOB text?)
     1     Happy Toast    Andrew          butter on bread, then toast bread, etc.    
    
    Table Three - Recipe Needs (many-to-many)
    
    [RecipeID]  [IngredientID]
     1            1               (toast needs butter)
     1            2               (toast needs bread)
    

    这应该让你开始。

    编辑 - 示例查询

    “所有使用黄油的食谱”

    SELECT r.name FROM recipeNeeds n
        LEFT JOIN tableRecipes r
            ON r.ID=n.recipeID
        LEFT JOIN tableIngredients i
            ON i.ID=n.ingredientID
        WHERE i.name='butter'
    

    【讨论】:

    • 所以每次我想添加一个新的食谱时,我都必须手动检查每个recipeID和componentID的关联?这是构建它的最佳方式吗?一段时间后,表 3 似乎会变得非常难看,无法阅读。这真的不适用于替代成分,向前思考会吗?感谢您的回复。
    • 好吧,在 99.9% 的情况下,您从未阅读过表格,您的脚本会阅读 - 就像 PHP 或 Javascript - 并使用表单来构建 HTML 网页来操作内容。也许是一个成分表,每个成分表都有自己的复选框,由您的脚本自动构建,因此当您添加新成分/食谱(使用另一个页面)时,它会自动显示。原谅通过判断,但你似乎是一个等级初学者(就像我 12 个月前一样)。我建议开始一本 PHP & MySQL 教程书。它将涵盖您需要做的所有事情,包括如何制作页面来操作您的数据库。
    • 是的,这是构建它的最佳方式。数据库并不难看,数据库看到的是纯粹的一步关系,可以快速浏览和执行计算。 :-)
    • 举个实际的例子,我有一个网站,其中记录了 1200 多场战斗以及每场战斗所涉及的军事单位。所以我有一个只有两列的多对多表——battleID 和 unitID。它目前有 30k 行并且正在攀升。我有没有看过它?当然不是!谁能记住所有这些 ID 代码?这一切都由 PHP 驱动的网页处理。所以在我看到“谢尔曼坦克”的地方,数据库看到了 Unit 138,我们都很高兴。 ;-)
    • 好的,非常感谢。我要玩这个。是的,我是一个 PHP 菜鸟,虽然我在数据库系统课程中,这至少让我理解你在说什么:D 谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 2017-04-23
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多