对于大学项目,我需要执行以下操作:


让用户通过HTML表单输入成分,通过PHP将其处理到我的MySQL数据库中。例如:
用户输入EGG,QUANTITY和CALORIES。
让用户使用这些成分制作食谱。因此,这是另一种带有食谱名称和成分的表格。


现在我的问题是:如何正确连接这些表?因此,带有食谱名称的餐桌食谱知道repiceid 1由3个鸡蛋,100g牛肉和300g奶酪组成吗?

我阅读了有关查找表的信息,但我不理解它们。任何帮助,将不胜感激。

到目前为止,我的表结构如下所示:

php - 如何设计数据库以使用户输入和保存配方-LMLPHP

最佳答案

如果每个配方都具有多种成分,并且每种成分仅属于一个配方,那么您将具有一对多关系。您应该这样定义表:

+----------------+                                 +------------------+
| 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_idingredient_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/

10-11 12:44