请告知DB表和索引

时间:2009-08-16 07:54:03

标签: mysql database

嘿大家,我目前正在建立一个高效的烹饪食谱网站(让我们就这么说吧。)

每种食谱都含有10种或更少的成分。

所以给定一种成分,我怎样才能找到1)受试者存在的所有食谱,以及2)1)中每种食谱中存在的所有其他成分。快速。

我最初的计划是这样的:(我将解释原因:请注意语法不是特定于语言,因此每个人都更容易理解,请注意我首先在MySQL上执行此操作,然后如果可能,我可能想要以更少的功能更快地转向更快的东西,比如tokyodb,我很喜欢它。)

Create TABLE mapping:
# This table holds all the names of everything, hopefully storing int
# will cause less IO
id int(32)
name char(32) 
index/key (name) 

Create table recipes:
# Note that ing1 - ing10 are not nulls, zero will be used for empty
name char(32)
ing1 int(32)
ing2 int(32)
ing3 int(32)
ing4 int(32)
ing5 int(32)
ing6 int(32)
ing7 int(32)
ing8 int(32)
ing9 int(32)
ing10 int(32)
index/key on name

create table relationship:
# This table holds the relationship between ingredients and recipe
ing int(32)
recipe int(32) 
key/index on ing

你们觉得怎么样? 有人可以想到更好的实施吗?

2 个答案:

答案 0 :(得分:1)

食材配方指数非常好。但它也使你的食谱表看起来毫无意义。

食谱由4件事组成:

  1. 成分列表。
  2. 每种成分的数量。
  3. 食谱的名称。
  4. 准备和烹饪说明(可能被视为实际配方)。
  5. 因此,如果您有一个表将食谱索引号索引到成分索引号,那么您不需要在食谱本身中列出每个成分索引号。事实上,你可以让你的配方/成分指数有两列,一列是成分的数量(一个简单的浮点数在.1和100之间,比方说),另一列用于该数量的单位(盎司) ,汤匙,杯子等等,基于你的其他表格,我想你会想要一个与可能测量表相关联的整数。说到,你也想要一个称为“自我”的测量,例如成分为“鸡蛋”,数量为“3”,这样它就可以解决为“3个鸡蛋”,而不需要盎司或杯子

    另外,你提到“0将被使用”,但在什么情况下食谱需要0?好奇。

    结果将是:

    #table of recipes names
     id int(32)
     name char(32) 
    
    #table of ingredients
     id int(32)
     ingredient char(32)     
    
    #table of instructions
     id int(32)
     rec_id int(32) #foreign key for recipes
     instruct text
    
    #table of units
     id int(32)
     unit (text)
    
    #table of recipe-ingredients
     id int(32)
     rec_id int(32) #foreign key for recipes
     igred_id (32) #foreign key for ingredient
     quant float(5, 2) #amount per ingred
     unit_id int (32)
    

    现在您可以查看已检查的任何或所有成分,它可以返回匹配的食谱索引,您将其作为列表输出给用户。用户选择引起他们注意的配方,这会触发对配方指令的查询以及配方成分的另一个查询(已经在同一个表中有金额)。

答案 1 :(得分:0)

我认为您需要一个单独的成分表 - 您的映射没有成分细节的空间,可以想象您可能希望有一天包含供应商参考或产品代码。

您的关系表已经允许您推断出令人难以置信的食谱集,因此您不需要ing1-10字段。

我会将关系表称为ingredientUsage表。它可能需要诸如数量等字段。

您现在可以轻松搜索 ing 是您选择的ID的成分用品,并加入配方并加入igredientUsage和其他成分的成分。