我应该如何处理配料数据库中的计量单位?

时间:2015-01-14 20:40:11

标签: mysql sql database-design

我刚刚开始使用MySQL / MariaDB学习SQL,我认为一个好的项目是为我(实际)当地比萨饼店建立一个营养和价格信息数据库。我的整体概念:

  1. 有关成分营养信息的信息表。

  2. 一张成分价格信息表。

  3. 一张食谱表,显示每个披萨中每种成分的含量。

  4. 我有几个问题:

    1. 营养信息的不同成分和方面通常使用不同的单位:每杯盐的毫克钠,每液体盎司的酱油毫克钠,每磅面粉的蛋白质克数,每磅面粉的卡路里等我怎么处理这个?理论上,最干净的方法是测量除卡路里以毫克为单位的所有营养素,以及所有成分(千克),但之后我需要一张密度表(并不总是随时可用)以及一些方法来隔离用户那个烂摊子。而且卡路里仍然是个怪人。

    2. 比萨饼,面团和酱汁的两个关键方面,作为(几乎)所有种类的比萨饼的“子食谱”。处理这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:6)

由于问题是征求意见,很难给你并“回答”这个问题,不过我的意见是:

  1. 在您的配料表上保留“单位”类型的字段,如果您需要汇总配方的内容,则可能需要另一个表格,用于从一个单位到另一个单位的转换比率。
  2. ----------------------------------------------
    | id | item             | quantity  |  unit  |
    -----------------------------------------------
      1    flour                 2          kg     
      2    eggs                  4          count
      3    paste                 3          g
    
    
    ============================
    | unit1   | unit2  | convt  |
    -----------------------------
        g        kg      0.01
    

    我还没有在这里完成,但你有一个单位表,并在转换表中使用他们的ID。某些单位类型(如count)将无法转换,因此转换表中未找到的任何单位都不允许进行转换。同样的方法可以用于营养元素。

    1. 对于食谱中的食谱,您需要一个设置,这意味着食谱也可以是一种成分,因此,假设您有一组指向一组食谱的食谱,它还需要能够参考食谱密钥(也许单位也可以用于此)。也许是这样的:
    2.   Recipes 
        -------------------------
        | id  |  name           |
        -------------------------
        | 1   |  dough          |
        | 2   |  sauce          |
        | 3   |  pizza          |
      
      
        Recipe Ingredients
        ---------------------------------------------------------
        | recipe | ingredient   | quantity  | unit   | key ref  |
        ---------------------------------------------------------
        | 1      |  flour       |    400    |  g     |  NULL    |
        | 1      |  egg         |     3     |  count |  NULL    |
        | 1      |  water       |     5     |  foz   |  NULL    |
        | 2      |  tomatoes    |     1     |  kg    |  NULL    |
        | 2      |  onions      |     3     |  count |  NULL    |
        | 3      |  dough       |     1     |  recipe|  1       |
        | 3      |  sauce       |     1     |  recipe|  2       |
      

      现在你的应用程序代码需要捕获recipe条目并循环回来以获取它们的“真实”成分并继续这样做,直到没有更多recipe个条目。 你必须小心确保你的应用程序能够防止无限循环的可能性,就像一个自己的配方一样。

      有些人会说我在这里使用单位列来保存不是'单位'的数据(请记住这实际上只是指向你的单位表的ID),但我认为这是一个没有实际意义的点。可能认为食谱是一个有效的“单位”,但是嘿。

      我并不是说这是最好的设计,只是一些想法让你开始提出你提出的两点。