Data normalisation: The basics, the trade-offs, and how teams use it in practice

Data Pipeline

Stripe Data Pipeline sends all your up-to-date Stripe data and reports to Snowflake or Amazon Redshift in a few clicks.

Learn more 
  1. Introduction
  2. What is data normalisation?
  3. Why does data normalisation matter for analytics accuracy and governance?
  4. What are the main normal forms?
  5. How does data normalisation work in practice?
  6. What are the common trade-offs of data normalisation?
  7. How do analytics and warehouse teams apply data normalisation in workflows?
  8. How Stripe supports cleaner, more reliable data for normalisation downstream

Analytics problems eventually trace back to the data underneath. Duplicate customer records, revenue figures that don’t match across reports, and dashboards that contradict each other aren’t visualisation or query problems; they’re schema problems, and data normalisation is how teams fix them at the source.

Below, we’ll discuss how data normalisation works, what a normalised schema looks like in practice, and where the real trade-offs show up for analytics and warehouse teams.

Highlights

  • Data normalisation structures a relational database so that each piece of information lives in exactly one place. This eliminates duplicate and conflicting values.

  • Analytics teams can apply normalisation across a pipeline by first building normalised core entity tables and then layering denormalised reporting on top.

  • A modern payment provider can sync payment data directly into a business’s warehouse. This gives normalised schemas a complete and fresh source to build from without routing sensitive financial data through third-party connectors.

What is data normalisation?

Data normalisation is the process of organising a relational database so that each piece of information lives in exactly one place. You do that by splitting data into related tables and linking them through keys rather than repeating the same values across rows.

The goal is consistency. As data volume grows, that structural discipline is what separates a warehouse you can trust from one you’re constantly auditing.

Why does data normalisation matter for analytics accuracy and governance?

Unnormalised data can create categories of problems that compound as your data grows.

Each of the following is a structural flaw in the schema itself:

  • Update anomalies: These happen when the same fact appears in multiple rows. If a subscription plan’s name is stored directly on every invoice row, renaming the plan means updating thousands of records, and missing even one creates a discrepancy. In a normalised schema, the plan name lives in a plans table; the invoice just holds a plan_id.

  • Insertion anomalies: These occur when you can’t record something without recording something else unrelated. In a flat table that stores customer and order data together, you can’t add a new customer until they place an order, which means the table breaks the moment your sales team starts loading prospects into the warehouse.

  • Deletion anomalies: These occur when deleting a specific record unintentionally removes unrelated, important data. Delete the last order for a customer from a flat table, and you’ve lost their contact information too because it had no independent home.

What are the main normal forms?

Normal forms are a sequence of increasingly strict rules for how data should be structured.

Teams utilising data normalisation need to understand the forms up to and including the third normal form (3NF) to make good schema decisions. A database is often described as “normalised” if it meets 3NF.

  • First Normal Form (1NF): This requires that every column holds atomic values—no lists, no comma-separated strings, and no arrays packed into a single field. A products column containing “shirt, pants, jacket” fails 1NF. Three rows with a product_id and a product_name each pass it.

  • Second Normal Form (2NF): This builds on 1NF by requiring that every nonkey column depends on the whole primary key, not merely part of it. If a line items table uses “(order_id, product_id)” as its key but also stores the customer’s city, which depends only on order_id, that’s a partial dependency and a 2NF violation. The customer’s city belongs on the orders table.

  • Third Normal Form (3NF): This eliminates transitive dependencies, meaning nonkey columns that depend on other nonkey columns rather than on the key itself. If an orders table stores both zip_code and city, and the city is determined by the zip code rather than by the order, those fields belong in a separate geography table.

  • Boyce-Codd Normal Form (BCNF): This is a stricter version of 3NF that handles edge cases involving overlapping candidate keys. For analytics schemas, reaching 3NF is sufficient.

How does data normalisation work in practice?

The clearest way to see what normalisation actually does is to start with a broken table and fix it. Here’s an example of an unnormalised orders table and an explanation of what happens to it after normalisation.

Unnormalised orders table

order_id
customer_name
customer_email
product_name
product_category
qty
unit_price
1001 Ana Torres ana@example.com Wireless headset Electronics 2 79.00
1002 Ana Torres ana@example.com USB-C cable Electronics 1 12.00
1003 Ben Marsh ben@example.com Wireless headset Electronics 1 79.00

There are three immediate problems with this table. Ana’s email appears twice: if you update it in one row, you’ve created a conflict. The product name and category repeat on every order row, so changing a category means touching every historical order that included it. And there’s no way to add a new customer or product without attaching an order to it.

After normalisation, you’d have three tables:

  • Customers: customer_id, name, email
  • Products: product_id, name, category
  • Orders: order_id, customer_id, product_id, qty, unit_price

Ana’s email lives once. The headset’s category lives once. Orders reference both by ID. A Structured Query Language (SQL) two-join SELECT statement can combine data from the multiple tables based on common conditions: a small, permanent cost for a schema that doesn’t accumulate errors as it scales.

What are the common trade-offs of data normalisation?

While it has important benefits, normalisation can also introduce real costs for teams.

The trade-offs fall into three areas:

  • Query complexity: Every relationship you normalise into its own table is a join you’ll write later. A report you could read from one flat table now requires three joins, and the cognitive overhead adds up across a team of analysts working directly in SQL.

  • Upfront modelling effort: Designing a normalised schema requires understanding the domain well enough to identify entities, their attributes, and the relationships between them. Teams under pressure to ship often skip this to build flat structures that seem easier in the moment but become expensive later.

  • Read performance: On very large tables, joins are slower than scans. Modern data warehouses (e.g., BigQuery, Snowflake, Redshift) have query optimisers that handle joins reasonably well, but denormalised structures often win on raw query speed for analytical workloads against billions of rows.

How do analytics and warehouse teams apply data normalisation in workflows?

In practice, analytics teams layer normalisation across a pipeline. Different levels of structure serve distinct purposes and concerns: data integrity is handled at the normalised core layer, and query performance and analyst ergonomics are handled at the reporting layer.

Here's how:

  • Staging layer: Raw data lands here nearly as-is from the source. Little to no transformation happens at this stage. The goal is just to get data into the warehouse intact and queryable, not to model it.

  • Normalised core layer: Transformation tools produce normalised entity tables from the staging layer—one for customers, one for subscriptions, and one for transactions. These sit at roughly 3NF and serve as the source of truth for any downstream model.

  • Reporting layer: On top of the normalised core, teams build wide, denormalised tables designed for speed and ease of use in a business intelligence (BI) tool such as Tableau or Looker. A revenue dashboard model might join five normalised tables into one wide fact table that the BI tool reads directly.

How Stripe supports cleaner, more reliable data for normalisation downstream

The quality of any normalised schema depends entirely on the quality and completeness of the data feeding it. Stale or incomplete transaction records can create reconciliation gaps that no amount of careful schema design can fix.

Here’s what a payment provider can offer:

  • Syncing: Stripe Data Pipeline moves Stripe data (e.g., charges, customers, subscriptions, refunds, disputes, payouts) directly into a warehouse or cloud storage destination, with no third-party connector in the middle or application programming interface (API) rate limits.

  • Completeness: Stripe ensures data completeness by syncing all Stripe data, prebuilt financial reports, and curated datasets.

  • Security: When teams route Stripe data through third-party extract, transform, and load (ETL) connectors, they’re sending sensitive financial data into an additional vendor’s infrastructure. Data Pipeline handles the transport directly, which removes that intermediary and eliminates one vendor from your data security review list.

Data Pipeline doesn’t replace a full ETL platform. If you’re combining Stripe data with data from a dozen other sources, you still need transformation tooling. But this solution is designed specifically for syncing your Stripe data better than a third-party connector to ensure your financial data is synced reliably, securely, and accurately.

The content in this article is for general information and education purposes only and should not be construed as legal or tax advice. Stripe does not warrant or guarantee the accuracy, completeness, adequacy, or currency of the information in the article. You should seek the advice of a competent lawyer or accountant licensed to practise in your jurisdiction for advice on your particular situation.

More articles

  • Something went wrong. Please try again or contact support.

Ready to get started?

Create an account and start accepting payments – no contracts or banking details required. Or, contact us to design a custom package for your business.

Data Pipeline

Stripe Data Pipeline sends all your up-to-date Stripe data and reports to your data warehouse in a few clicks.

Data Pipeline docs

Understand your business with Stripe data.