Вот другой подход, который может быть полезен для вас. У него чуть больше затрат на обслуживание, чем у подхода PARENT_ID или lft / rght, но поиск намного проще (и быстрее).
Dole бананы могут быть в таблице продуктов. У вас есть один category_id для продукта.
У нас было требование разрешить несколько категорий для продукта. Это привело нас к созданию таблицы соединений category_products, в которой продукт может иметь несколько соединенных строк. Затем мы должны были решить, есть ли бананы Dole только в бананах, или в бананах и всех их родителях. Поскольку скорость поиска была критической, мы поместили бананы пособия по безработице в его категории и все их родительские категории. Есть три объединения продуктов категории для бананов пособия по безработице.
Используя эту структуру, можно легко и быстро вернуть все элементы из любой категории, всего один запрос. Вы не можете сделать это в подходе PARENT_ID (если вы не жестко закодировали родителей, бабушек и дедушек и т. Д.). Категоризация продукта требует вставки нескольких строк в таблицу соединений. Удаление и перемещение категорий немного сложнее.