Tom,

Well,  I didn't include a design with my post.

Audit tables always get their own PK in my book, along with
a datestamp recording the time of the change and column
indicating who made the change ( if that's available ).

The old value(s) is/are always in the audit table, the new
value is always in the production table.

If a row is deleted, the whole thing goes in the audit table.

My purpose for these has been for occasional auditing.  
I use code ( Perl, or course ) to generate the proper DDL
and triggers for all tables I wish to audit, placing them in
their own tablespaces.

Your implementation of a separate table for column changes
is intriguing,  I'll compare it with what I normally do next time
someone thinks they want their stuff audited.

If someone wants to query this stuff on a regular basis,
it needs to be designed and constructed appropriately.

At that time I take Snodgrass and Kimball off the bookshelf.  :)

Jared


On Tuesday 29 January 2002 12:10, Thomas B. Cox wrote:
> Now you're getting into the realm of Temporal or Time-
> Oriented Databases.
>
> Suppose you want to know what change Fred made on
> Tuesday.  With your design, the audit row only
> shows what the old value was, not what the new
> value is.  To find that, you have to find either
> the current production row, OR the next-most-recent
> change for that row in the audit table.
>
> Finding the next-most-recent row in an audit
> table is not a lot of fun, and can be a bit of
> a performance pig.
>
> And suppose the next change is a deletion.  A typical
> way to track that is to record only the PK value
> of the deleted row.  If you do that, then you've
> lost the 'new' value that Fred put in.
>
> So, if you regularly report on old-and-new values
> from the audit table, it makes sense to store them
> both for the same change.  My most recent design
> looked something like this, with one row in AUD_TAB
> for each row changed, and one row in AUD_COL for
> each column changed in that row (inserts and updates
> only):
>
> AUD_TAB
> change_id (pk)
> table_name
> change_type
> pk_value
>
> AUD_COL
> change_id (fk) (pk)
> column_name    (pk)
> old_value
> new_value
>
> Cheers.
>  -Tom
>
> --- Jared Still <[EMAIL PROTECTED]> wrote:
> > I don't think you need two rows for updates.  The old values
> > will be in the audit table, the new ones are in the production
> > table.
> > At least that's the way I've always done it.
> > Is there some other reason for saving both in the audit table?
> >
> > On Tuesday 29 January 2002 03:00, Rachel Carmichael wrote:
> > > Update -- add two rows to the auditing table -- first with old
> > > values and type = O
> > > second with all the new values and type =N
> > >
> > > --- "Foelz.Frank" <[EMAIL PROTECTED]> wrote:
> > > > What I need is exactly what Oracle doesn't support. Logging "who"
> > > > changed "what" in a special area of our database.
> > > >
> > > > I think triggering the events will be much more specific and more
> > > > easy to change.
> > > >
> > > > In case all our applications use the same database and user, I am
> > > > trying to check out
> > > > what application is changing monitored tables (i.e.
> > > > c:\app\userapp\app.exe is changing table1).
> > > > What do you think of that ??
>
> =====
> Thomas B. Cox "Saepe in errore sed numquam in dubito"
> [EMAIL PROTECTED]   http://www.geocities.com/tbcox23/
>
> "The whole aim of practical politics is to keep the
> populace alarmed (and hence clamorous to be led to
> safety) by menacing it with an endless series of
> hobgoblins, all of them imaginary." --H.L. Mencken
>
> __________________________________________________
> Do You Yahoo!?
> Great stuff seeking new owners in Yahoo! Auctions!
> http://auctions.yahoo.com
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Jared Still
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to