Одна вещь, которая не сразу очевидна из документации по HierarchyID, это то, что вы можете свободно указывать любые числовые данные, которые вы хотите, в качестве составляющих пути. Мне лично нравится использовать автоматически сгенерированный идентификатор (будь то значение идентификатора или иное). Мне также нравится помещать что-то вроде ParentID
в качестве столбца в таблице, так что если что-то идет не так, чтобы поддерживать столбец иерархии в актуальном состоянии, вы можете использовать рекурсивный запрос для его повторной генерации (то есть, чтобы иерархия столбец - это производные данные, которые используются только для повышения эффективности запросов).
Если говорить прямо, допустим, у меня была следующая таблица:
ID ParentID
================
100 NULL
200 100
300 100
400 200
Я бы вывел столбец иерархии следующим образом:
ID ParentID h
=========================
100 NULL /100/
200 100 /100/200
300 100 /100/300
400 200 /100/200/400
Я не могу придумать, как сделать это без первой вставки строки со значением null
для иерархии, если вы используете столбец идентификаторов. Если вы используете Последовательность для выделения идентификатора, вы можете получить значение из последовательности и использовать его как для значения идентификатора, так и для получения иерархии.