Re: How to represent a tree-structure in a relational database

From: Ron Peterson <ron(dot)peterson(at)yellowbank(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: How to represent a tree-structure in a relational database
Date: 2000-12-28 14:26:20
Message-ID: 3A4B4D8C.9E542934@yellowbank.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Stuart Statman wrote:
>
> I would suggest, instead, to create a table that represents your hierarchy
> without adding columns. For example :
>
> create table Category (
> CategoryID int4 not null primary key,
> ParentCategoryID int4 not null REFERENCES Category (CategoryID),
> CategoryName varchar(100)
> );

Another possibility would be to use two tables to represent the data
structure.

CREATE SEQUENCE category_node_id_seq;
CREATE TABLE category_node (
name TEXT
NOT NULL,

id INTEGER
DEFAULT NEXTVAL('category_node_id_seq')
PRIMARY KEY
);

CREATE TABLE category_edge (
parent INTEGER
NOT NULL
REFERENCES category_node(id),

child INTEGER
NOT NULL
REFERENCES category_node(id)
);

This structure is more 'normal' in the sense that nodes without children
(in a tree, the leaf nodes) don't have records in the edge table.

What either of these structures allow to do is create directed graph
structures. If you'd like to constrain this structure to be a tree, you
have to enforce that restriction with procedural code.

-Ron-

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Ron Peterson 2000-12-28 14:36:57 Re: Compiling "C" Functions
Previous Message Ron Peterson 2000-12-28 14:09:54 Re: Tree structure table normalization problem (do I need a trigger?)