Every time I need to design a new database I spend quite some time thinking on how I should set up the database schema to keep an audit log of the changes.
Some ques
I don't know of any reference, but I'm sure someone has written something.
However, if the purpose is simply to have a record of what happened—the most typical use of an audit log—then why not simply keep everything:
timestamp
username
ip_address
procedureName (if called from a stored procedure)
database
table
field
accesstype (insert, delete, modify)
oldvalue
newvalue
Presumably this is maintained by a trigger.