Представлять иерархии в реляционной базе данных довольно просто. Вы просто используете ссылки на себя. Например, у вас есть таблица категорий, в которой есть поле с именем ParentCategoryId, которое имеет значение null (для конечных категорий) или идентификатор родительской категории. Вы даже можете настроить внешние ключи для обеспечения правильных отношений. Такую структуру легко перебрать в коде, обычно с помощью рекурсии, но при написании sql-запросов возникает боль.
Одним из способов обхода клона реестра является использование пути к ключу реестра в качестве ключа. То есть, есть запись, где Path - «X / Y / Z / SomeKey», а Value - «someValue». Это упростит запрос, но может не отображать иерархию так, как вам хотелось бы. То есть у вас будут только значения, а не общая структура иерархии.
Суть в том, что вы должны пойти на компромисс, чтобы отобразить иерархию с неизвестным количеством уровней в структуре реляционной базы данных.