2016-06-07 61 views
0

我想創建一個數據庫來顯示配料和配方之間的關係。爲此,我已經定義了兩個表成分類型(可能是後來加入到一個表):Sqlite:將條目鏈接到多個條目(配料和配方)

Ingredients1 
-id /primary 
-name 
-description 
-... 

Ingredients2 
-id /primary 
-name 
-description 
-... 

我想用一個單一的配方表看起來像這樣:

Recipies 
-id /primary 
-name 
-description 
-item /foreign key-> quantity 
-item /foreign key-> quantity 
-... 

排序看上去像這樣的:

recipe database

現在每個成分可以與每個時間不同數量的多個食譜。在搜索時,我只能找到一個項目總是鏈接到一個組的關係。

是否有可能(也是合理的)設置這樣一個單一的配方表(如果是這樣,怎麼做?)還是將這樣的表分成多個表?例如:

Recipedescription: 
-id /primary 
-name 
-description 

Recipeingredients: 
-id /primary 
-recipename /foreign 
-ingrediant /foreign 
-quantity 

問題:單個配方表是否有意義?如果是這樣,我如何添加配料到現有的配方?

我使用python來訪問和創建數據庫。

+0

爲什麼你有兩個配料表? 「一個項目總是與一個團體聯繫在一起」是什麼意思? – philipxy

+0

不幸的是,你的設計很失敗。一旦你糾正了你的設計基礎,你所需要的SQL對你(和/或其他可以幫助的人) – openwonk

回答

0

如果你有兩個成分列(一個糟糕的設計),他們都可以有外鍵到同一個表。外鍵表示引用表中的子值顯示爲在引用表中形成候選鍵的列的子值。

直截了當的設計有一個配料表,一個配方表和一個表,給出配方中配料的數量。 (請閱讀我們爲什麼要歸一化爲多個表格,而不是一張表格,這是他們的組合。)

您不一定需要ID。顯然名字是獨一無二的;一對配方名稱和配料名稱是獨一無二的。無論您是想要id(名稱和/或三胞胎),都是一個單獨的問題。

-- ingredient NAME is described as DESCRIPTION 
Ingredient(name, description) 
-- Recipe NAME is described as DESCRIPTION 
Recipe(name, description) 
-- recipe R_NAME has QUANTITY units of ingredient I_NAME 
Quantity(r_name, i_name, quantity)