How to Build Notion Relation for Recipe-Ingredient-Nutrition Tracking
🔍 WiseChecker

How to Build Notion Relation for Recipe-Ingredient-Nutrition Tracking

You want to track recipes, their ingredients, and the nutritional data for each ingredient in Notion. A single database cannot handle this because one recipe contains many ingredients, and each ingredient has unique nutrition values. This article explains how to create three linked databases — Recipes, Ingredients, and Nutrition — using Notion relations and rollups. You will learn to set up the databases, connect them with relation properties, and display aggregated nutrition data inside each recipe page.

Key Takeaways: Building a Recipe-Ingredient-Nutrition Relation in Notion

  • Three separate databases: Create Recipes, Ingredients, and Nutrition tables to avoid data duplication and keep each source of truth independent.
  • Relation property on the Ingredients database: Connect each ingredient to its nutrition record so one ingredient links to one nutrition entry.
  • Rollup property on the Recipes database: Sum calories, protein, and other nutrients from all linked ingredient nutrition records automatically.

ADVERTISEMENT

Overview of the Three-Database Relation Model

A traditional single-table approach forces you to repeat ingredient names and nutrition values for every recipe. That approach causes data inconsistency and extra manual work. The relational model uses three databases that each hold one type of data.

The Recipes database stores only recipe names, cooking time, and instructions. The Ingredients database stores each ingredient name and its category, such as vegetable or grain. The Nutrition database stores the nutrient values per 100 grams for each ingredient, including calories, protein, fat, and carbs.

The connections work as follows. A one-to-many relation links one recipe to many ingredients. A one-to-one relation links each ingredient to its corresponding nutrition record. Finally, a rollup property on the Recipes database aggregates nutrition data from all linked ingredients.

Prerequisites

You need a Notion workspace with database creation rights. All three databases must be in the same workspace. No integrations or third-party tools are required.

Steps to Create the Recipe-Ingredient-Nutrition Relation

  1. Create the Nutrition database
    Open Notion and create a new database. Name it “Nutrition.” Add the following properties: Name (title), Calories (number), Protein (number), Fat (number), Carbs (number), and Serving Size (text). Each row will represent one ingredient’s nutrition per 100 grams. For example, create a row named “Chicken Breast” with Calories 165, Protein 31, Fat 3.6, Carbs 0.
  2. Create the Ingredients database
    Create a second database named “Ingredients.” Add the Name property as the title. Add a Select property called “Category” with options such as Vegetable, Grain, Protein, and Dairy. Add a Relation property and name it “Nutrition.” Click the relation and select the Nutrition database as the target. This relation will connect each ingredient to its nutrition record.
  3. Link each ingredient to its nutrition data
    Inside the Ingredients database, open a new row. Enter the ingredient name, for example “Chicken Breast.” Set the Category to Protein. Click the Nutrition relation cell and select the matching row from the Nutrition database. Repeat this for every ingredient you plan to use.
  4. Create the Recipes database
    Create a third database named “Recipes.” Add the Name property as the title. Add properties for Cooking Time (number), Servings (number), and Instructions (text). Add a Relation property named “Ingredients” and target the Ingredients database. This relation allows you to link multiple ingredients to one recipe.
  5. Link ingredients to a recipe
    Open a new recipe row. Enter the recipe name, for example “Grilled Chicken Salad.” Set the Cooking Time to 15, Servings to 2, and write the instructions. Click the Ingredients relation cell and select all ingredients that belong to this recipe, such as Chicken Breast, Lettuce, Tomato, and Olive Oil.
  6. Add rollup properties for nutrition totals
    In the Recipes database, add a Rollup property named “Total Calories.” Configure it to roll up from the Ingredients relation. In the Property field, select Nutrition. In the next dropdown, select Calories. Set the Calculate option to Sum. Repeat this process for Protein, Fat, and Carbs. The rollup will sum the nutrient values from all linked ingredients.
  7. Verify the data flow
    Open the Grilled Chicken Salad recipe page. The rollup properties should display the total calories, protein, fat, and carbs from all linked ingredients. If a value shows as empty, check that every ingredient has a nutrition record linked and that the rollup is configured to the correct property.

ADVERTISEMENT

Common Mistakes and Limitations When Building This Relation

Rollup shows 0 or blank

A rollup returns zero when the related database property is empty or the relation is missing. Open each ingredient row and confirm the Nutrition relation cell points to an existing nutrition row. Also verify that the rollup property on the Recipes database targets the correct property path: Ingredients > Nutrition > Calories.

Nutrition data is duplicated across recipes

If you create a new nutrition row for each recipe instead of reusing the same ingredient, you will have duplicate data. Always link the same ingredient row to multiple recipes. For example, link the Chicken Breast ingredient to both Grilled Chicken Salad and Chicken Soup. The nutrition data remains in one place.

Ingredient quantity is not included

The rollup sums nutrition based on 100 grams per ingredient. If your recipe uses 200 grams of chicken, the rollup will still show the 100-gram value. To account for quantity, add a Number property called “Quantity (grams)” to the Ingredients relation on the Recipes database. Then create a formula property that multiplies the rollup value by the quantity divided by 100.

Recipes vs Ingredients vs Nutrition: Database Structure Compared

Item Recipes Database Ingredients Database Nutrition Database
Primary purpose Store recipe details and instructions Store ingredient names and categories Store nutrient values per 100 grams
Relation type used One-to-many to Ingredients One-to-one to Nutrition None (linked from Ingredients)
Rollup properties Yes — sums nutrient totals from linked ingredients No No
Example row Grilled Chicken Salad, Cooking Time 15, Servings 2 Chicken Breast, Category Protein Chicken Breast, Calories 165, Protein 31

This structure keeps each type of data in its own table, eliminating duplication and making updates easy. Changing the nutrition value for Chicken Breast updates all recipes that use it automatically.

You can now build a fully relational recipe tracking system in Notion. Start by creating the Nutrition database, then the Ingredients database, and finally the Recipes database. For a more advanced setup, add a Quantity property and a formula to calculate the actual nutrition per serving instead of per 100 grams.

ADVERTISEMENT