我刚刚开始使用MySQL / MariaDB学习SQL,我认为一个好的项目是为我(实际)当地比萨饼店建立一个营养和价格信息数据库。我的整体概念:
有关成分营养信息的信息表。
一张成分价格信息表。
一张食谱表,显示每个披萨中每种成分的含量。
我有几个问题:
营养信息的不同成分和方面通常使用不同的单位:每杯盐的毫克钠,每液体盎司的酱油毫克钠,每磅面粉的蛋白质克数,每磅面粉的卡路里等我怎么处理这个?理论上,最干净的方法是测量除卡路里以毫克为单位的所有营养素,以及所有成分(千克),但之后我需要一张密度表(并不总是随时可用)以及一些方法来隔离用户那个烂摊子。而且卡路里仍然是个怪人。
比萨饼,面团和酱汁的两个关键方面,作为(几乎)所有种类的比萨饼的“子食谱”。处理这个问题的正确方法是什么?
答案 0 :(得分:6)
由于问题是征求意见,很难给你并“回答”这个问题,不过我的意见是:
---------------------------------------------- | 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)将无法转换,因此转换表中未找到的任何单位都不允许进行转换。同样的方法可以用于营养元素。
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),但我认为这是一个没有实际意义的点。可能认为食谱是一个有效的“单位”,但是嘿。
我并不是说这是最好的设计,只是一些想法让你开始提出你提出的两点。