PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przechowywać i odpytywać bazę danych o strukturze drzewa?

W dowolnej bazie danych, jeśli każdy element „drzewa” ma te same właściwości, najlepiej użyć tabeli samoodwołującej się, zwłaszcza jeśli każde drzewo ma jednego i tylko jednego bezpośredniego rodzica.

IE.

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

Zwykle duży szef miałby NULL boss_hr_id

Aby zapytać o taką strukturę, w postgresie możesz użyć CTE (instrukcja "z rekurencyjną")

W przypadku powyższej tabeli zadziała takie zapytanie:

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
) 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pule połączeń PostgreSQL:część 3 – Pgpool-II

  2. Przewodnik po partycjonowaniu danych w PostgreSQL

  3. Standaryzacja bezpieczeństwa PostgreSQL w środowiskach wielochmurowych

  4. Podziel kolumnę na wiele wierszy w Postgres

  5. Jak zweryfikować nakładające się czasy w Railsach za pomocą postgresql