您刚刚发现了多对多关系!
您将需要 3 个表来处理这些数据,“Dish”、“Ingredient”和“DishIngredient”。“DishIngredient”有时被称为“连接表”。它存储有关其他 2 个表之间关系的信息。
您的表结构将如下所示:
您将希望Dish.DishID
和Ingredient.IngredientID
成为主键,外键位于DishIngredient
. 上的主键DishIngredient
应该是DishIngredient.DishID和DishIngredient.IngredientID
.
在复合键上制作主键DishIngredient
不是绝对必要的,它可以有自己的 ID,但复合主键会防止同一成分多次出现在同一道菜中。
您可以通过连接来连接这些表以获取食谱的所有成分,如下所示:
SELECT
Dish.Name AS Dish,
Ingredient.Name AS Ingredient,
DishIngredient.Quantity AS Quantity
FROM Dish
INNER JOIN DishIngredient
ON Dish.DishID = DishIngredient.DishID
INNER JOIN Ingredient
ON DishIngredient.IngredientID = Ingredient.IngredientID
WHERE Dish.Name ='Pizza'