2017-06-17 33 views
-1

我將創建一個SQL數據庫來存儲有關烹飪的信息。將有菜餚,配料等如何組織關於SQL數據庫中碗碟的信息?

問題是如何表示有關菜的信息,以包括所有與菜有關的成分。

例如,有包含的字段,如成分表:
- ID
- ing_name
- ing_type
...

而另一個表所包含的信息關於一道菜如:
- id
- dish_name
- dish_type
...
- 等

而且必須有相關的所有迪斯的成分,但是它們的數量可以是不同的,所以我不知道如何存儲相關成分到桌上的盤子裏。

可以說,id = 1的盤子包含id = 3,5,8和12的配料,我怎樣才能在桌子上表示這些信息呢?

回答

0

你剛剛發現了一個多對多的關係!

您將需要3個表格來處理這些數據,「菜餚」,「成分」和「DishIngredient」。 「DishIngredient」有時稱爲「連接表」。它存儲有關其他兩個表之間關係的信息。

你的表結構會是這個樣子:

    • DishID
    • 名稱
  • 成分
    • IngredientID
    • 名稱
  • DishIngredient
    • DishID
    • IngredientID
    • 數量

你會希望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' 
+0

非常感謝,你們非常有幫助! –