Реляційні системи керування базами даних на основі SQL лише частково підходять для ієрархічних або рекурсивних запитів. Інші системи, такі як ArangoDB, краще підходять для цього (про це була чудова доповідь на GOTO 2016 ). Однак, також можливо створювати рекурсивні запити в SQL за допомогою Common Table Expressions , що дозволяє, наприклад, запитувати класичні таблиці батьків/дочір для всіх предків та нащадків.
Наприклад, у PostgreSQL це виглядає так:
0672c4761d202a35a9059fa137ace7c3/ca9b571d40544dcd8e0afc989c89c49f8b1f3251
Якщо ви хочете отримати всіх дочірніх елементів певного item_id, ви використовуєте загальні вирази таблиці:
0672c4761d202a35a9059fa137ace7c3/ca9b571d40544dcd8e0afc989c89c49f8b1f3251
Запитати батьків теж не проблема:
0672c4761d202a35a9059fa137ace7c3/ca9b571d40544dcd8e0afc989c89c49f8b1f3251