I was reading recently about keeping a hierarchy in a RelationalDBMS, and all the articles were pointing to "Nested Set" usage instead of "Adjacency List" that you have currently. Managing Hierarchical Data in MySQL by Mike Hillyer is one such article.