Я склонен использовать оба, если мне нужно получить поддеревья.
Строки имеют 2 столбца int, состоящих из id и parentId. Это составляет древовидную структуру.
Кроме того, у меня также есть текстовый уровень, представляющий индексы родительской строки. например строка с idName = "44.21.31" будет иметь идентификатор 31, родительский идентификатор 21, а ее родительский родитель будет иметь идентификатор 44. Таким образом, вы можете получить поддеревья, `где idName, как" 44.21.% " забрать каждого ребёнка, великого ребёнка и так далее в строке с идентификатором 21.
Хотя это нарушает нормальную форму, теперь есть избыточная информация об id объекта - но это может стоить того, особенно для систем БД, которые иначе не поддерживают иерархические структуры.