Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-sql by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group