Typically, each table stores LastChangeUser and LastChangeDate, and sometimes CreateUser and CreateDate. This is usually suitable for most tables.
However, if you need to store more than that, for really important tables (usually money-related), go to another table. In this table (OriginalTableName_History) I usually have a history identifier, which is an automatic increment, history and historical type (I = insert, U = update, D = delete), and then all the columns from the source table. Usually I have one trigger on the main table that places each change (insert / update / delete) in the history table.
source share