I agree with drawmack.
When you are doing a recursive heirarchy, it's deceptively simple. For example, if you wanted to represent this tree:
[ROOT]
|-blah
| |-cat
| |-dog
| -mouse
|-another blah
|-orange-purple
...it's very easy. And, you only need one table. Consider that each category will have these properties: Category ID, Parent ID, Name. Ostensibly, each category will have its own Category ID. So, you would need to design a table as such:
TABLE: my_categories
CategoryID INT
ParentID INT
CategoryName TEXT
In response to your question about it getting complicated, consider this layout as it relates to the above example.
ITEMS: my_categories (CategoryID / ParentID / CategoryName):
1 / -1 / blah
2 / 1 / cat
3 / 1 / dog
4 / 1 / mouse
5 / -1 / another blah
6 / 5 / orange
7 / 5 / purple
In this example, I use negative one (-1) to signify that the category is at "the top" of the heirarchy. Since I never use negative one as an index in my tables, it works great. So take for example the "blah" thread. Its CategoryID is "1". Therefore, anything with a ParentID of "1" belongs UNDER "blah" since its CategoryID is "1".
Thus, "cat" (ID=2), "dog" (ID=3), and "mouse" (ID=4) belong under "blah" since their ParentID is "1" and "blah"'s CategoryID is "1".
Also, using this method makes searching and displaying the heirarchy on the screen much simpler.
Hope this helps.