Thinking about what you're saying, perhaps we're talking about different aspects of denormalisation. I'm talking about introduction of more data, I think we're getting our wires crossed because perhaps you think I mean denormalisation is the reversal of normalisation? I think those are both two valid ways of denormalising.
My most common usage of denormalisation is:
Code:
Users
=======
ID (PK)
Emails
=======
ID (PK)
FromUserID (FK)
TotalEmailsUserHasSent => SELECT Count(*) FROM Emails WHERE FromUserID = {0}
Denormalised:
Code:
Users
=======
ID (PK)
TotalEmailsSent (int)
Emails
=======
ID (PK)
FromUserID (FK)
TotalEmailsUserHasSent => SELECT TotalEmailsSent FROM Users WHERE ID = {0}
Denormalised has the advantage that no index is required in this example on Emails, and the query I would expect to basically be as fast as possible.