Существует 4 основных способа хранения деревьев в реляционной БД:
Adjacency List - описан
@Satanpit.
Matherialized Path - полный путь до узла хранится в виде строки типа 0035.0993.7324.1256 (т.е. узел верхнего уровня содержит строку 0035, узел второго уровня - строку 0035.0993 и т.д.)
Nested Set - для каждого узла хранятся 2 числа: левый и правый индексы. Причём левый индекс узла меньше левого индекса любого потомка этого узла, а правый индекс соответственно больше.
Closure Table - отдельно храним данные, отдельно иерархию.
А ещё есть комбинации этих способов.
По всем этим способам в рунете (в том числе на хабре) существует большое количество информации.