Dan,
Looks good to me. It's the same thing I do for the Celko tree
structures in one application -- I have a cache table holding such
things as level and parent_id for each node, values which can only be
generated from the source tables through slow aggregates.
Also, the use of a child table to hold the pathnames should cure your
"cascading trigger" problem.
-Josh Berkus