I wrote:
> On 10/8/07, chetana bhargav <[EMAIL PROTECTED]> wrote:
> > >> Is this a garbage collection situation, where you want a row in B to go
> > >> away when all referring rows in A are deleted?
> >
> > Yes exactly this is what I wanted :)
> Maintaining a reference count in table B may be more efficient from an
> I/O standpoint, but you'll probably have to do checking within app
> code (instead of using SQL triggers directly), and it would likely
> only pay off if table A has both a vey large number of total rows, as
> well as many references to the same key in table B. It's also not as
> clean from an SQL standpoint, since it's an additional item that must
> be tracked, yet has nothing to do with your actual data dependencies.
After thinking a bit more about implementing this, a pair of triggers
can accomplish it without doing anything special in the app:
CREATE TRIGGER DeRef AFTER DELETE ON A
BEGIN
UPDATE B SET refcount = refcount-1 WHERE key = OLD.refkey;
END;
CREATE TRIGGER DelOrphans AFTER UPDATE ON B
WHEN NEW.refcount = 0
BEGIN
DELETE FROM B WHERE rowid = NEW.rowid;
END;
I still favor the simpler approach, but at least this one is workable.
I also choose lousy trigger names :)
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------