I recently read You might as well timestamp it and today I came across an equal truism
Just create a relation.
Many a time have i seen tables of a given object where the table has a status field and a status_changed timestamp.
But guess what; knowing when a status changed, what caused it AND WHAT THE PREVIOUS STATUS WAS happens quite a lot.
So whenever I write a field called status, state or something similar I always default to making it a relation.
So instead of post table like
|some id||some title||some status||timestamp||body|
I opt for two tables
|some id||some title||body|
|some id||some status||timestamp||user_id|
The current status is always the last entry (ordered by created_at) in that table for that given id.