Normalization structures data into tables with no (or minimal) redundancy; each fact stored once. Denormalization deliberately duplicates or embeds data to speed up reads and simplify queries at the cost of redundancy and update complexity.
| Normalization | Denormalization |
|---|---|
| No redundant data; single source of truth | Redundant data; faster reads, fewer joins |
| Updates in one place | Updates must propagate to all copies |
| More joins for complex reads | One table or document per read pattern |
| Good for consistency and write path | Good for read-heavy, analytics, caches |
Use normalized schema for the canonical write path. Use denormalization in read replicas, materialized views, or document/NoSQL read models when you need to optimize for specific queries and can keep duplicates in sync (e.g. via events or ETL).