Hello, I am new here and creating my first app. I own a cocktail lounge and I am creating an app as a reference source for our bartenders, giving them all the necessary details to make each of our cocktails, including:
- Name
- Price
- Picture
- Ingredients w/ amounts
- Steps to make the drink
- Glass Type
- Garnish
- Ice Type
Both ingredients and steps have include several line items (i.e. there are multiple ingredients and multiple steps for each drink).
I am starting by building the database of the drinks. I am wondering if I should:
- Include all of the ingredients and steps in the same row by naming the cells “Ingredient 1”, “Ingredient 2”, “Step 1”, “Step 2”, etc.
- Since we use a lot of the same ingredients and same steps, list them in a separate table and link them into the row of the drink.
- A better approach that you guy have that I am not aware of.
I am just getting started and wanted to do it the right way before I put a bunch of effort in to building it wrong.
Thanks for your help!!
Hello! Hope the guide below helps you a bit with building relational databases for your use case. A note for this is I don’t know if you need an ingredient in multiple steps for a single recipe (e.g: 10g of Ingredient X in Step 1, 5g of Ingredient X in Step 4). Please let me know if that is the case.
Your instinct to list ingredients and steps in separate tables is spot on. This approach, known as normalization in database design, is much more efficient and scalable than your first idea of having multiple “Ingredient 1,” “Step 1,” etc., columns in the same table.
1. Cocktails Table
This is the main table for your drinks. Each row represents a unique cocktail.
Table: Cocktails
| Cocktail_ID |
Name |
Price |
Picture_URL |
Glass_Type |
Garnish |
Ice_Type |
| C001 |
Old Fashioned |
14.00 |
/images/old_fashioned.jpg |
Rocks |
Orange Peel |
Large Cube |
| C002 |
Margarita |
12.50 |
/images/margarita.jpg |
Margarita |
Lime Wedge & Salt Rim |
Crushed |
| C003 |
Negroni |
13.00 |
/images/negroni.jpg |
Rocks |
Orange Peel |
Large Cube |
2. Ingredients Table
This table will store a master list of all the ingredients you use in your lounge. This prevents you from having to type out the same ingredient name multiple times and reduces the chance of typos.
Table: Ingredients
| Ingredient_ID |
Name |
| I001 |
Bourbon |
| I002 |
Angostura Bitters |
| I003 |
Sugar Cube |
| I004 |
Water |
| I005 |
Tequila |
| I006 |
Lime Juice |
| I007 |
Triple Sec |
| I008 |
Gin |
| I009 |
Campari |
| I010 |
Sweet Vermouth |
3. Steps Table
Similar to the ingredients table, this will be a master list of all the individual steps involved in making your cocktails. These steps can be used globally in any recipes.
Table: Steps
| Step_ID |
Description |
| S001 |
Muddle the sugar cube and bitters with a splash of water. |
| S002 |
Add the bourbon and a large ice cube. |
| S003 |
Stir until well-chilled. |
| S004 |
Garnish with an orange peel. |
| S005 |
Rim the glass with salt. |
| S006 |
Shake all ingredients with ice. |
| S007 |
Strain into the chilled glass. |
| S008 |
Garnish with a lime wedge. |
| S009 |
Add all ingredients to a mixing glass with ice. |
| S010 |
Garnish with an orange peel. |
Linking the Tables Together
Now that we have our core data, we need to connect them. This is where “linking” or “junction” tables come in.
4. Cocktail Ingredients Table
This table links the Cocktails and Ingredients tables. It specifies which ingredients are in which cocktail and in what amount. This is the key to handling multiple ingredients for each drink.
Table: Cocktail_Ingredients
| Cocktail_ID |
Ingredient_ID |
Amount |
| C001 |
I001 |
2 oz |
| C001 |
I002 |
2 dashes |
| C001 |
I003 |
1 |
| C001 |
I004 |
1 splash |
| C002 |
I005 |
2 oz |
| C002 |
I006 |
1 oz |
| C002 |
I007 |
0.75 oz |
| C003 |
I008 |
1 oz |
| C003 |
I009 |
1 oz |
| C003 |
I010 |
1 oz |
5. Cocktail Steps Table
This table links the Cocktails and Steps tables. It outlines the preparation steps for each cocktail and, importantly, the order in which they should be performed.
Table: Cocktail_Steps
| Cocktail_ID |
Step_ID |
Step_Order |
| C001 |
S001 |
1 |
| C001 |
S002 |
2 |
| C001 |
S003 |
3 |
| C001 |
S004 |
4 |
| C002 |
S005 |
1 |
| C002 |
S006 |
2 |
| C002 |
S007 |
3 |
| C002 |
S008 |
4 |
| C003 |
S009 |
1 |
| C003 |
S003 |
2 |
| C003 |
S007 |
3 |
| C003 |
S010 |
4 |
1 Like
This is a HUGE help and exactly what I needed. Thank you!! I assume that all of these tables are made in a individual tab within the same spreadsheet, correct?
1 Like
No. If using glide tables, they would all be separate tables. If using google sheets, they would be separate tabs in the same spreadsheet. It is not a best practice to merge different sets of data in the same table.
1 Like