Для работы с такими структурами в PostgreSQL могут использоваться следующие модели:

  • Adjacency model (AM) - модель, когда в колонке хранится родитель;
  • Nested Sets (NS) - модель, когда в паре колонок хранится диапазон всех вложенных элементов;

Materialised Path model (MP) - модель, когда в колонке хранится полный путь до элемента.

  • Также подробней об реализации иерархических структур в реляционной БД можно почитать здесь.

Для их реализации в Django выбраны следующе инструменты:

AM - штатная рекурсия Django на основе ForeignKey;

NS - модуль django-mptt;

MP - модуль ltree PostgreSQL с оберткой Ltree;