Sql server 如何在SQL数据库中组织有关菜肴的信息?

Sql server 如何在SQL数据库中组织有关菜肴的信息?,sql-server,data-representation,Sql Server,Data Representation,我将创建一个SQL数据库来存储有关烹饪的信息。将会有菜肴、配料等 问题是如何表示一道菜的信息,以便包含与该菜相关的所有成分 例如,有一个包含以下字段的配料表: -id -ing_名称 -ing_类型 … 等 另一个表包含关于一道菜的信息,例如: -id -菜名 -盘子类型 … -等 必须有所有与diss相关的配料,但数量可能不同,因此我不知道如何将与菜肴相关的配料储存在桌子上 假设id=1的菜肴包含id=3、5、8和12的成分,我如何在关于菜肴的表格中表示这些信息?您刚刚发现了多对多关系 您需要

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

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

例如,有一个包含以下字段的配料表:
-id
-ing_名称
-ing_类型

另一个表包含关于一道菜的信息,例如:
-id
-菜名
-盘子类型

-等

必须有所有与diss相关的配料,但数量可能不同,因此我不知道如何将与菜肴相关的配料储存在桌子上


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

您刚刚发现了多对多关系

您需要3个表来处理此数据,“菜肴”、“配料”和“配料”。“配料”有时被称为“连接表”。它存储关于其他两个表之间关系的信息

您的表结构将如下所示:

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'
  • 盘子
    • 碟状
    • 名字
  • 配料
    • 英格里丁
    • 名字
  • 餐具配料
    • 碟状
    • 英格里丁
    • 数量
您需要将
Dish.DishID
component.IngredientID
作为主键,并在
Dish component
中使用外键。
dishcomponent
上的主键应该是dishcomponent.DishID和
dishcomponent.IngredientID
上的复合键

dishcomponent
上设置主键并非绝对必需,它可以有自己的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'

非常感谢,你帮了我很大的忙!