Once you have created your database in normalized form, you may perform benchmarks and decide to intentionally back away from normalization to improve performance. Denormalizing:
Can be done with tables or columns
Assumes prior normalization
Requires a knowledge of how the data is being used
Good reasons to denormalize are:
All queries require access to the “full” set of joined data
Computational complexity of derived columns require storage for selects