Once you have normalized your database, you can run benchmark tests to verify performance. You may have to denormalize for specific queries and/or applications.
Can be done with tables or columns
Assumes prior normalization
Requires a thorough knowledge of how the data is being used
You may want to denormalize if:
All or nearly all of the most frequent queries require access to the full set of joined data.
A majority of applications perform table scans when joining tables.
Computational complexity of derived columns requires temporary tables or excessively complex queries.