如何组织SQL数据库中的菜肴信息?

时间:2017-06-17 13:50:56

标签: sql-server data-representation

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

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

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

另一张表包含有关菜肴的信息,例如:
- id
- dish_name
- dish_type
...
- 等

并且必须有与所有相关的成分,但是它们的数量可能不同,所以我不知道如何在桌子上存储与菜相关的成分。

让我们说id = 1的菜包含id = 3,5,8和12的成分,我怎样才能在表中列出关于菜肴的信息?

1 个答案:

答案 0 :(得分:0)

你刚刚发现了多对多的关系!

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

您的表格结构如下所示:

    • DishID
    • 名称
  • 成分
    • IngredientID
    • 名称
  • DishIngredient
    • DishID
    • IngredientID
    • 数量

您需要Dish.DishIDIngredient.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'