Databases

Normalization vs Denormalization

Normalization vs denormalization explained with examples, and when duplicating data on purpose actually makes sense.

Normalization
Database Normalization
VS
Denormalization
Database Denormalization
The short answer

Normalization organizes data to remove duplication, keeping each fact in exactly one place. Denormalization intentionally reintroduces some duplication to make reads faster, at the cost of extra work to keep copies in sync.

Normalization vs Denormalization at a glance

NormalizationDenormalization
GoalEliminate duplicate dataImprove read performance
Data duplicationMinimal, each fact stored onceIntentional, data is copied across tables
Write performanceFast, updates happen in one placeSlower, updates may need to touch multiple copies
Read performanceCan require many joinsFast, often avoids joins entirely
StorageSpace efficientUses more storage due to duplication
Common useTransactional systems like bankingRead heavy systems like analytics dashboards

When to use each

Choose Normalization when

  • Your system does frequent writes and needs to avoid update anomalies.
  • You care most about data consistency and avoiding duplication bugs.
  • You are designing the core transactional schema for an application.

Choose Denormalization when

  • You have a read heavy workload where joins are becoming a performance bottleneck.
  • You are building a reporting or analytics database separate from the main app.
  • You are willing to trade some storage and write complexity for faster reads.

What normalization actually solves

Imagine a table that stores an order with the customer's name and address directly inside every order row. If that customer moves, you now have to update every single order row to keep the data correct, and if you miss one, your data becomes inconsistent. Normalization fixes this by splitting data into separate tables, like customers and orders, connected by keys, so the customer's address exists in exactly one place.

Why anyone would want duplication back

Normalized data is consistent, but reading it often means joining several tables together, which gets slower as data grows. Denormalization deliberately copies some data back into other tables, like storing a customer's name directly on the order row, so a query can read what it needs from one place instead of joining across three or four tables.

In the interview

A strong answer notes that this is not either or in most real systems. It is common to keep the core transactional data normalized for correctness, then denormalize into a separate read optimized copy, like a reporting table or a cache, for the queries that need speed.

Frequently asked questions

Is denormalization always bad practice?

No. It is a deliberate trade off, not a mistake. It is a completely valid choice when read speed matters more than write simplicity and you have a plan for keeping duplicated data in sync.

What is the third normal form?

Third normal form, commonly called 3NF, is a level of normalization where every non key column depends only on the table's primary key and not on other non key columns, which removes most redundant data.

How do NoSQL databases relate to this?

Many NoSQL databases, like document stores, are designed around denormalized data by default, favoring fast reads of a single document over the strict normalization common in relational databases.

Want more interview ready comparisons?

Browse every Normalization vs Denormalization style breakdown, or explore the full question library.

All comparisons Browse questions