這取決於您實際需要如何處理您的系統。需要跟蹤庫存的系統需要了解,「組合餐」需要通過一個熱狗和32盎司蘇打(或其他)來清點庫存。然而,一個只追蹤訂單和美元的系統並不真正在意組合餐會有什麼「進入」 - 只有你賣掉了一個並獲得了報酬。
也就是說,假設您需要庫存系統。您可以通過稍微改變您的定義來降低複雜性。考慮(1)庫存物品和(2)菜單項。您的inventory_items表格包含您購買並追蹤爲庫存的物品(熱狗,蘇打水等)。您的menu_items表格包含您銷售的物品(Big Dog Combo Meal,熱狗(僅限三明治)等)。
你可以有,巧合的是,具有相同的名稱作爲庫存項目,但對於對待他們,你做一個組合項目以同樣的方式,堅持一個記錄插入鏈接表這些菜單項的一些菜單項:
inventory_items menu_items recipes (menu_item, inventory, qty)
--------------- ------------ ----------
hot dog Hot Dog Hot Dog, hot dog, 1
hot dog bun Hamburger Hot Dog, hot dog bun, 1
hamburger patty (4oz) Big Dog Combo Hamburger, hamburger patty (4oz), 1
hamburger bun Soda (32oz) Hamburger, hamburger bun, 1
cola Big Dog Combo, hot dog, 1
ginger ale Big Dog Combo, hot dog bun, 1
Big Dog Combo, *soda, 32
Soda (32oz), *soda, 32
只是構建這個例子,事實證明,即使是低熱狗也有兩個組件(你必須計算髮髻),而不僅僅是一個。爲了提出最簡單的情況(一個單一組件的菜單項),我在菜單中添加了蘇打水。但是,考慮一下,如果你打算清點非食品物品(杯子),那麼即使是一個簡單的蘇打水也會有兩個組件(三個如果你正在清理吸管)。
請注意,使用此設計,將不會有處理組合項目和非組合項目的特殊代碼路徑。所有與菜單相關的功能將只使用menu_items
表格,所有庫存和食物準備相關功能將JOIN
menu_items
到recipes
和(如果需要額外的字段)到inventory_items
。
您需要對可選組件(酸菜,津津有味,辣椒等)以及可以從不同庫存項目中選擇的組件(在此模型中表示爲蘇打)進行特殊處理,但這會讓您開始。
嗨拉里,我還在想你的解決方案。我試圖解決的問題實際上並不僅僅是食物。它也可能是其他項目。我試圖分析你的解決方案,看它是否足夠滿足我需要的。 – StackOverflowNewbie
我在做銷售時記錄什麼?我是否存儲對'menu_items'的PK的引用?如果是這樣,那意味着一旦出售該特定物品,我就需要保留該記錄以用於歷史目的。這樣我就知道出售menu_item的「熱狗」實際上意味着熱狗和熱狗包子。如果該menu_item稍後被編輯(例如,意味着熱狗,熱狗包,芥末),那麼該編輯應該實際上導致在menu_item的表中創建新的條目。 – StackOverflowNewbie
或者,我可以在銷售記錄中存儲menu_item的熱狗通過複製'recipes'中的相關記錄來表示的意思。如果熱狗的意思後來改變,那很好。這意味着什麼已經存儲在銷售記錄中。我想我不應該允許一個menu_item的硬銷售一旦出售(再次保存歷史數據);我只是爲它設置一個標誌。思考? – StackOverflowNewbie