Hey, I'll try to keep this brief (

)... *EDIT: Fail...*
A (well, the...) database I'm currently designing needs to capture information about changes made to it. The problem is, I can see too many different ways to do it...
Tables in question: Item, Relationship (between instances of Item) and Attributes (EAV!).
Please suggest a standard method of logging such changes as:
<User> updated <Item> changing <Attribute> from <Value> to <Value>
or...
<User> added <Item>
or...
<User deleted <Item>
There is an element of audit trailing (who did what) and an element of historical data (how things were).
My ideas (so far):
Eventlog(EventLogID, Item_ID, EventType_ID, EventTimestamp, Username, EventlogValue) - only good for seeing who did what to which item, when... Elements of change are obscured / lost / bundled into EventlogValue attribute, which may be a problem. Also, I might require a second table to log Relationship events (the above definition only caters for Item).
Extend the horrible EAV attribute table (it's staying, that's a given!) to have historic attribute types, e.g. <Entity> <Attribute: Name> <Value> and when it's updated, change it to <Entity><Attribute: PreviousName> <Value>. I could add a date column (EAV-D, anyone?

) to put the changes in context / historical order but... Eugh, this is making a bad thing worse?
Extend the Item, Relationship and Attribute tables to have both a Status (bitwise or foreign key to some status lookup table) attribute and a StatusChanged (timestamp) so I would never delete anything (yay for historical data) but instead set its status to off / deleted and update the timestamp. This could spiral way out of control though... I guess I could use / abuse a trigger to make sure the count of historical data for a given item (of a given type) doesn't exceed some value though, and delete older data where it does. I'd also need to think about adding in WHO did what, too.
Move values to historical versions of tables (which are the same, but timestamped etc., probably) and keep the up-to-date data completely separate from the historical data.
There are more, but this is long enough already...
Thanks in advance guys.