Re: tree structures in sql - my point of view (with request - Mailing list pgsql-sql

From Oleg Bartunov
Subject Re: tree structures in sql - my point of view (with request
Date
Msg-id Pine.GSO.4.44.0209032141350.10568-100000@ra.sai.msu.su
Whole thread Raw
In response to tree structures in sql - my point of view (with request of comment from joe celko)  (Hubert depesz Lubaczewski <depesz@depesz.pl>)
Responses Re: tree structures in sql - my point of view (with request  (<mallah@trade-india.com>)
List pgsql-sql
While I don't have a time to comment your message I want to point to
contrib/ltree package which is extremely fast :-)

http://www.sai.msu.su/~megera/postgres/gist/ltree
Oleg
On Tue, 3 Sep 2002, Hubert depesz Lubaczewski wrote:

> hi
> i recently spent some time on tree-structures in sql.
> i started with simple id/parent_id approach, used by nearly everyone,
> then i stopped at joe celko's nested sets, but i found it not very
> usable.
> then i found my own (maybe someone wrote it before, but i haven't read
> it, so idea is mine) way.
> in my way we have two tables:
> create table data (id serial, name text);
> create table structure (parent_id int8, child_id int8, depth int8);
>
> structure table represents all paths in tree.
> for example for this tree:
>
>           sql
>          /     \
>     postgresql      oracle-----__
>     |     /    |        \
>      linux     sco    linux   windows
>              /       \
>           glibc1   glibc2
>
> (sorry for used data - it is just template, and personally i don't like
> oracle).
> so, for this tree we would populate the tables this way:
> data:
>  id | name
> ----+------------
>   1 | sql
>   2 | postgresql
>   3 | oracle
>   4 | linux
>   5 | sco
>   6 | linux
>   7 | windows
>   8 | glibc1
>   9 | glibc2
>
> structure:
>  parent_id | child_id | depth
> -----------+----------+-------
>          1 |        1 |     0
>          2 |        2 |     0
>          3 |        3 |     0
>          4 |        4 |     0
>          5 |        5 |     0
>          6 |        6 |     0
>          7 |        7 |     0
>          8 |        8 |     0
>          9 |        9 |     0
>          1 |        2 |     1
>          1 |        3 |     1
>          1 |        4 |     2
>          2 |        4 |     1
>          1 |        5 |     1
>          1 |        6 |     1
>          1 |        7 |     1
>          3 |        5 |     2
>          3 |        6 |     2
>          3 |        7 |     2
>          1 |        8 |     3
>          1 |        9 |     3
>          3 |        8 |     2
>          3 |        9 |     2
>          6 |        8 |     1
>          6 |        9 |     1
>
> (records with depth 0 are technologically not necessary, but they
> simplify and speedup some queries).
>
> with this data layout (easily indexable) you can fetch any data with
> just one select statement (no recursion needed in any case):
> - fetching parent
> - fetching childs
> - fetching "from id up"
> - fetching "from id down"
> also when you need to get indirect parents/childs or when you need only
> some of the data (from me, up, but not more then to my
> grand-grand-grand-father).
>
> i'd like to get some comments on this - how do you see my idea, is it
> worth it, do you know any better way to store trees in sql?
>
> best regards
>
> depesz
>
>
Regards,    Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83



pgsql-sql by date:

Previous
From: "Yudie@axiontech.com"
Date:
Subject: Update Help
Next
From: Oliver Elphick
Date:
Subject: Re: Update Help