The first three normal forms
- 1NF — each cell holds one atomic value (not an array, not a comma-separated list)
- 2NF — no partial dependencies: every non-key attribute depends on the entire primary key
- 3NF — no transitive dependencies: non-key attributes depend only on the key, not on other non-key attributes
Denormalization
Normalization reduces redundancy but increases JOINs. In read-heavy systems, data is deliberately denormalized (duplicated) to avoid complex queries. A typical example: storing a username alongside a comment to avoid JOINing to the users table.