Moving Beyond Lists: Structuring Data with Notion Relations and Rollups
Stop duplicating data in Notion. Learn how to use Relations and Rollups to transform flat tables into a relational system with a single source of truth.
02 Apr 2026, 13:17 UTC

The Problem with Flat Lists
Most users start with Notion by creating simple tables. As a project grows, you often find yourself duplicating data. If you have a Clients list and a Projects list, you might manually type the client's name next to every project. When that client changes their company name or contact email, you have to find every single project entry and update it manually. This is a data integrity problem.
The fix is to stop treating Notion tables as spreadsheets and start treating them as relational data stores. By using Relations and Rollups, you can create a single source of truth where data is entered once and referenced everywhere.
Linking Entities with Relation Properties
A Relation property acts as a bridge between two different databases. In technical terms, it functions similarly to a foreign key in a SQL database, allowing one record in Database A to point to one or more records in Database B.
When you create a Relation, you have two primary configuration choices:
- One-way Relation: Database A links to Database B, but Database B does not show a backlink to Database A. This is useful for simple categorization.
- Two-way Relation: Both databases show the connection. If you link a Project to a Client, the Client's page automatically updates to show that Project. This is the standard for maintaining a bidirectional map of your data.
Aggregating Data with Rollups
While a Relation tells you which records are connected, a Rollup tells you something about those records. A Rollup cannot exist without a Relation; it is a dependent property that pulls specific information through the established bridge.
Rollups allow you to perform basic aggregations on the related data, such as:
- Summing: Adding up total costs from a set of linked tasks.
- Counting: Seeing how many projects are currently active for a specific client.
- Unique Values: Listing all the different team members involved across several related tasks.
Worked Example: Client Project Tracking
Follow these steps to build a dynamic client tracker:
- Create the Databases: Create a database named Clients and another named Projects.
- Establish the Relation: In the Projects database, add a new property. Select Relation, then search for and select the Clients database. Toggle on Show on Clients to make it a two-way relation.
- Link the Data: In a project record, for example Website Redesign, click the Relation cell and select the corresponding client, for example Acme Corp.
- Configure the Rollup: In the Clients database, add a new property and select Rollup. Configure it with these three settings:
- Relation: Select the Projects relation.
- Property: Select the Status property from the Projects database.
- Calculate: Select Count all.
Result: The Clients database now automatically displays the total number of projects associated with each client without any manual counting.
Performance Trade-offs and Limitations
Notion is not a dedicated SQL engine, and this architecture comes with limits. As your databases grow into the thousands of records, you may notice UI latency. Specifically, pages with hundreds of relation tags can slow down significantly during the initial load.
Furthermore, Rollups are read-only. You cannot manually edit the value of a Rollup; you must edit the source data in the related database. If you need to perform complex logic, you will need to supplement Rollups with Formula properties.
Verification Checklist
To ensure your relational structure is working correctly, perform these checks:
- Bidirectional Sync: Add a new project to a client. Check the client's page; the project should appear automatically.
- Aggregation Accuracy: Change a value in the source database, for example change a project status. The Rollup in the parent database should update instantly.
- Null Handling: Create a record with no relations. Ensure the Rollup displays as empty rather than causing an error.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.