Database design for changing data
There are generally 2 approaches:


Store all in one table, with a timestamp / version number.
Store the current version in one table, with an archive table for the older versions.


The first makes sense in a data warehouse mostly, while the second approach allows applications to be easier (as long as they do not care about the historical data). The archive table can be automated via triggers.

Having one table per state is the worst of post worlds - it makes application development horrendous, particularly as you have to rework all applications when you add an interim state. It also makes referential integrity painful.