PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment stocker et interroger une base de données avec une structure arborescente

Dans n'importe quelle base de données, si chaque membre de "l'arbre" a les mêmes propriétés, il est préférable d'utiliser une table d'auto-référence, surtout si chaque arbre a 1 et un seul parent direct.

C'est-à-dire.

HR
------
ID
first_name
last_name
department_id
sal
boss_hr_id (referneces HR.ID)

Habituellement, le grand patron aurait un NULL boss_hr_id

Pour interroger une telle structure, dans postgres, vous pouvez utiliser les CTE (instruction "avec récursivité")

Pour le tableau ci-dessus, une requête comme celle-ci fonctionnera :

with recursive ret(id, first_name, last_name, dept_id,boss_hr_id) as
    (
      select * from hr
      where hr.id=**ID_OF_PERSON_YOU_ARE_QUERYING_STRUCTURE**
      union
      select hr.id, hr.first_name, hr.last_name,hr.dept_id,hr.boss_hr_id, lev+1 from hr
      inner join ret on ret.boss_hr_id=hr.hr_id
    ) 
    select * from ret
)