This is a basic DB design question but I now run multiple times into the same situation which I try to illustrate in the following example.
Lets say I have make a DB-system for messaging in a classifieds platform.
A user publishes many ads and other users can message her for a specific ad.
I thus have an ads table, a user table and a message table in my DB.
Since users message people for specific ads, storing the ad AND the user is redundant.
On the other hand, when listing all incoming messages for a given user it would be much more efficient to have the user name as a field in the message table too, because a user might have many ads and only very few of them have messages.
So should the message table now have a user field or not?