It depends on what you really need to do with your system. A system that needs to track inventory will need to understand that a “combination meal” must debit an inventory of one hot dog and 32 ounces of soda (or something else). However, a system that only tracks orders and dollars does not really care about what is “included” in the combination food — only that you sold it and paid for it.
However, suppose you need an inventory system. You can reduce your complexity by slightly changing your definition. Think in terms of (1) inventory items and (2) menu items. The inventory_items table contains items that you buy and track as inventory (hot dogs, soda, etc.). The menu_items table contains the items you sell (Big Dog Combo Meal, Hot Dog (sandwich only), etc.).
You can have some menu items that, by coincidence, have the same name as the inventory item, but for these menu items they are treated the same way as you do a combined item and insert one entry into the link table:
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
Just build this example, it turns out that even hot dogs have two components (you have to count the bun), and not just one. To come up with the simplest case (a menu item with one component), I added Soda to the menu. However, think that if you are going to inventory non-food items (cups), then even plain soda will have two components (three if you are an inventory of straws).
Please note that with this design there will be no special code pages for processing combo elements and non-combo elements. All menu-related functionality will use only the menu_items table, all functions related to inventory and cooking will be JOIN menu_items before recipes and (if additional fields are needed) before inventory_items .
You will need special treatment for additional components (sauerkraut, grease, chili, etc.) and for components that can be selected from different inventory items (presented as * soda in this model), but this should help get you started.