許多一對多的關係是最好的這樣的中間(或「橋」)表來完成。橋表基本上由其他表的主鍵組成,以形成「更大的」外鍵,這允許您通過提供主鍵組合來實現多對多關係。
你的使用情況(簡化的)將需要的表喜歡這些:
dishes:
dish_id | other_columns
-------------------------
1 | ...
2 | ...
3 | ...
ingredients:
ingredient_id | other_columns
-------------------------------
1 | ...
2 | ...
3 | ...
dishes_ingredients_bridge:
dish_id | ingredient_id
-------------------------
1 | 1
1 | 2
2 | 2
2 | 3
3 | 3
這意味着你有3種菜餚和3層的成分,其中
- 盤1由配料1和2
- 碟2由成分2和3組成
- 碟3僅包含成分3
- 成分1只用在培養皿1
- 成分2在菜1使用和2
- 成分3中菜2使用和3
此外,確保在您的橋樑組合獨特(創建多列唯一鍵)。忽略它通常不會導致嚴重問題,但在某些邊緣情況下,您的應用程序可能會以未定義或意外的方式運行。
現在,您可以查詢(例如)這樣的菜1的所有成分:
SELECT i.*
FROM ingredients as i
LEFT JOIN dishes_ingredients_bridge dib
ON dib.ingredient_id = dib.ingredient_id
LEFT JOIN dishes as d
ON d.dish_id = dib.dish_id
「連接」一盤的成分意味着添加一行到橋樑。從配料中「斷開」菜餚意味着分別刪除這些行。
希望這會有所幫助。
你是我的朋友,是一位救生員,這是我的Uni論文的一部分,你已經使它變得更清晰了,查詢這種語法不是我清楚的,我非常感謝! –
不客氣。祝你好運! :)我剛剛認出了一個錯字,我會解決。 –