Re: How to represent a tree-structure in a relational database - Mailing list pgsql-sql

From Ron Peterson
Subject Re: How to represent a tree-structure in a relational database
Date
Msg-id 3A4B4D8C.9E542934@yellowbank.com
Whole thread Raw
In response to RE: How to represent a tree-structure in a relational database  ("Stuart Statman" <stu@slammedia.com>)
List 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-


pgsql-sql by date:

Previous
From: Ron Peterson
Date:
Subject: Re: How to represent a tree-structure in a relational database
Next
From: John Reid
Date:
Subject: Re: system catalog info