Вот это очень хорошая статья о различных способах хранения деревьев в SQL:
http://www.gsbelarus.com/gs/modules.php?name=News&file=article&sid=314Но, примеры там для MSSQL!
Главное, что там объясняется теория.
Рассказывается о:
* Ссылка на родителя
* Хранение вспомогательных связей
* Составной путь
* Интервальное дерево
Ну и моя скромная статейка:
https://club.shelek.ru/viewart.php?id=307У меня только id/parent_id и "Составной путь".
Самый простой и логичный - "ссылка на родителя", но выборка требует рекурсии.
Самый легкий в реализации - "составной путь". Но очень длинный ключ. Возможны еще минусы в зависимости от реализации.
Самый быстрый - "Интервальное дерево" (или "вложенные множества" - "nested sets"). Но операции сдвижки/раздвижки множества для удаления/вставки затрагивают много строк (от одной до всех).
"Хранение вспомогательных связей" - гибрид, хранящий все связи в отдельной таблице. Связи растут быстрее дерева.