Я базовую таблицу делал типа name, id, parent_id + добавлял туда денормализации в виде результатов вычисления дерева (для быстрых выборок). Получались еще поля path (типа 1.2.3), а так же nested_left + nested_right + level (уровень вложенности).
По факту path остался неюзаным (хотя он удобен для интерфейсных вещей). В целом такой подход мне понравился, нужно только жестко за консистентностью следить.