The first is to set up separate audit tables, one for each production table. Every time an update is made to a production table, the old row is written out to an audit table, with a time stamp. This is more expensive in terms of computing resources required because the information that you want for the live site is interspersed with seldom-retrieved archived information. But it is easier if you want to program in the capability to show the site as it was on a particular day. In general, if something greatly simplifies programming at the cost of additional computing resources, you should adopt the simper approach.
Computers are cheap and getting cheaper.
Programming is hard and expensive. This isn't an argument for profligacy. It is very difficult to fill up a modern disk drive with information typed by even a large collection of human beings. When doing real Web projects, you have to coordinate multiple contributors. The best way to do this is with a design document.