I have a table with all registered members, with columns like uid, username, last_action_time.
I also have a table that keeps track of who has been online in the past 5 minutes. It is populated by a cronjob by pulling data from members with last_action_time being less than 5 minutes ago.
Question: Should my online table include username or no? I’m asking this because I could JOIN both tables to obtain this data, but I could store the username in the online table and not have to join. My concern is that I will have duplicate data stored in two tables, and that seems wrong.
If you haven’t run into performance issues, DO NOT denormalize. There is a good saying “normalize until it hurts, denormalize until it works”. In your case, it works with normalized schema (users table joined). And data bases are designed to handle huge amounts of data.