>Another reason for breaking normalization is maintain integrity in your reporting. For example, let's say you have item descriptions that can change. In a lineitems table, you might elect to carry the description that existed when the lineitem was created. This way, when your item descriptions change, your past reports won't change.
Not to nit-pick, but this isn't really denormalization. If the item description for a lineitem needs to be recorded at the time of the invoice, and that description can later change independently of the invoice description, the current description and the historical description are two distinctly different pieces of information, and are not duplicated.
Erik Moore
Clientelligence