Just Create a Relation

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

id title status status_changed_at body
some id some title some status timestamp body

I opt for two tables

id title body
some id some title body

and

post_id status created_at created_by
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.