对于大学项目,我需要执行以下操作:
让用户通过HTML表单输入成分,通过PHP将其处理到我的MySQL数据库中。例如:
用户输入EGG,QUANTITY和CALORIES。
让用户使用这些成分制作食谱。因此,这是另一种带有食谱名称和成分的表格。
现在我的问题是:如何正确连接这些表?因此,带有食谱名称的餐桌食谱知道repiceid 1由3个鸡蛋,100g牛肉和300g奶酪组成吗?
我阅读了有关查找表的信息,但我不理解它们。任何帮助,将不胜感激。
到目前为止,我的表结构如下所示:
最佳答案
如果每个配方都具有多种成分,并且每种成分仅属于一个配方,那么您将具有一对多关系。您应该这样定义表:
+----------------+ +------------------+
| recipes | | ingredients |
+----------------+ +------------------+
| recipe_id <----------------+ | ingredient_id |
| recipe_name | | | ingredient_name |
| | +----------------+ recipe_id |
| | | |
| | | |
| | | |
| | | |
| | | |
+----------------+ +------------------+
请注意
ingredients
表如何具有recipe_id
指向recipes
表中的配方。当您要查询属于某个食谱的所有成分时,可以这样查询:SELECT
*
FROM
recipes r
INNER JOIN ingredients i WHERE i.recipe_id = r.recipe_id
但是,这可能不是您想要的,因为您可能想多次使用一种成分。在这种情况下,每种成分可以属于多个配方,并且每个配方可以具有多个成分。这是多对多关系。您应该这样定义表:
+----------------+ +------------------+
| recipes | | ingredients |
+----------------+ +------------------+
| recipe_id <---+ +--> ingredient_id |
| recipe_name | | | | ingredient_name |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+----------------+ | | +------------------+
| |
| +--------------------+ |
| | recipe_ingredients | |
| +--------------------+ |
| | id | |
+--+ recipe_id | |
| ingredient_id +--+
| quantity |
| type |
| |
| |
| |
| |
+--------------------+
注意额外的表。有时称为桥接表,它将
recipe_id
与ingredient_id
关联。以这种方式,可以将一种以上的成分与一种配方相关联,并且可以将一种以上的配方与一种成分相关联。我还向桥表添加了两个额外的列,这些列为关系添加了更多信息。我添加了quantity
(该成分的使用量)和type
可用于定义测量类型(例如杯子,克,茶匙等)。在这种情况下,当您要查询属于某个食谱的所有配料时,可以这样查询:SELECT
*
FROM
recipes r
INNER JOIN ingredients_recipes ir ON ir.recipe_id=r.recipe_id
INNER JOIN ingredients i ON i.ingredient_id=ir.ingredient_id
关于php - 如何设计数据库以使用户输入和保存配方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42933962/