我要创建一个SQL数据库来存储有关烹饪的信息。会有菜肴,配料等。
问题是如何表示有关菜肴的信息,以便包括与菜肴相关的所有成分。
例如,有一个表格,其中的成分包含以下字段:
- id
- ing_name
- ing_type
...
等
另一张表包含有关菜肴的信息,例如:
- id
- dish_name
- dish_type
...
- 等
并且必须有与所有相关的成分,但是它们的数量可能不同,所以我不知道如何在桌子上存储与菜相关的成分。
让我们说id = 1的菜包含id = 3,5,8和12的成分,我怎样才能在表中列出关于菜肴的信息?
答案 0 :(得分:0)
你刚刚发现了多对多的关系!
您需要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'