PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como armazenar e consultar um banco de dados com estrutura em árvore


Em qualquer banco de dados, se cada membro da "árvore" tiver as mesmas propriedades, é melhor usar uma tabela de auto-referência, especialmente se cada árvore tiver 1 e apenas 1 pai direto.

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

Normalmente, o chefão teria um NULL boss_hr_id

Para consultar tal estrutura, no postgres, você pode usar CTEs (instrução "com recursiva")

Para a tabela acima, uma consulta como esta funcionará:
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
)