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-
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?) |