sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo almacenar y consultar una base de datos con estructura de árbol

En cualquier base de datos, si cada miembro del "árbol" tiene las mismas propiedades, es mejor usar una tabla de referencia propia, especialmente si cada árbol tiene 1 y solo 1 padre directo.

ES.

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

Por lo general, el gran jefe tendría un NULL boss_hr_id

Para consultar dicha estructura, en postgres, puede usar CTE (declaración "recursiva")

Para la tabla anterior, una 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
)