对于大学项目,我需要做以下事情:
答案 0 :(得分:0)
如果每种食谱都含有多种成分,并且每种成分只属于一种配方,那么您就拥有一对多关系。您应该像这样定义表:
+----------------+ +------------------+
| 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