We are developing a large applications which are related to business. You can find these applications similar to some ERP, CRM, etc.
Now we have a requirement that we need all the data which are entered by the user to be versioned.
For example: at some point of time, the user would need to see what's the change history of a particular Purchase Order?
I am looking for a very generic versioning handler (not rigid), which could handle even cases if some some business data attributes gets changed. This single versioning handler should be able to work with almost any type of business objects/data.
What would be the best programming/database design to handle these.
Any Ideas or Opinions?
PS: I have added some programming tags as I want programmers to entertain this thread and give their ideas.
EDIT: I am looking for a very optimized way, somewhat similar to having diffs beings stored rather than storing the objects in a serialized/dumping way.