-1

我将创建一个 SQL 数据库来存储有关烹饪的信息。会有菜,配料等。

问题是如何表示关于一道菜的信息,以便包括与这道菜相关的所有成分。

例如,有一个包含以下字段的成分表:
- id
- ing_name
- ing_type
...

另一个表包含有关菜肴的信息,例如:
- id
- disc_name
- disc_type
...
- 等等

而且与diss相关的食材都必须有,但是数量可以不一样,所以我不知道如何将与菜相关的食材存放在桌子上。

假设 id = 1 的菜包含 id = 3、5、8 和 12 的成分,我如何在关于菜的表中表示这些信息?

4

1 回答 1

0

您刚刚发现了多对多关系!

您将需要 3 个表来处理这些数据,“Dish”、“Ingredient”和“DishIngredient”。“DishIngredient”有时被称为“连接表”。它存储有关其他 2 个表之间关系的信息。

您的表结构将如下所示:

  • 盘子
    • 菜号
    • 姓名
  • 成分
    • 成分ID
    • 姓名
  • 菜肴成分
    • 菜号
    • 成分ID
    • 数量

您将希望Dish.DishIDIngredient.IngredientID成为主键,外键位于DishIngredient. 上的主键DishIngredient应该是DishIngredient.DishIDDishIngredient.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'
于 2017-06-17T14:25:14.480 回答