Thread: cascading delete - recursivity

cascading delete - recursivity

From
"Postgresql"
Date:
Hi,

I have a table of categories (it's pseudo-sql...) :

CATEGORIES
(   id_category PRIMARY KEY,   id_category_parent (FOREIGN KEY ? CONSTRAINT ??) ,   cat_text
)

There is recursivity : id_category_parent is -1 (= no parent cat) or the
id_category of a category in this table.
What is the SQL statements to create such a table so that when you delete a
category, all sub-categories
are automatically deleted ?
I've tried many things like CONSTRAINT... but the query fails !


Thanks !




Re: cascading delete - recursivity

From
Stephan Szabo
Date:
On Sat, 9 Jun 2001, Postgresql wrote:

> Hi,
> 
> I have a table of categories (it's pseudo-sql...) :
> 
> CATEGORIES
> (
>     id_category PRIMARY KEY,
>     id_category_parent (FOREIGN KEY ? CONSTRAINT ??) ,
>     cat_text
> )
> 
> There is recursivity : id_category_parent is -1 (= no parent cat) or the
> id_category of a category in this table.
> What is the SQL statements to create such a table so that when you delete a
> category, all sub-categories
> are automatically deleted ?
> I've tried many things like CONSTRAINT... but the query fails !

If you want to use foreign keys, using -1 for no cat is going to mean
you're going to need a -1 category.  You're probably better off using
NULL for that.

you probably want something like:
id_category_parent REFERENCES categories ON DELETE CASCADE
[you may want to add ON UPDATE CASCADE]



Re: cascading delete - recursivity

From
Jan Wieck
Date:
Postgresql wrote:
> Hi,
>
> I have a table of categories (it's pseudo-sql...) :
>
> CATEGORIES
> (
>     id_category PRIMARY KEY,
>     id_category_parent (FOREIGN KEY ? CONSTRAINT ??) ,
>     cat_text
> )
>
> There is recursivity : id_category_parent is -1 (= no parent cat) or the
> id_category of a category in this table.
> What is the SQL statements to create such a table so that when you delete a
> category, all sub-categories
> are automatically deleted ?
> I've tried many things like CONSTRAINT... but the query fails !
   You  can  only  use  the  special  NULL value to suppress the   foreign key check on those rows that  don't  have  a
parent.   Then it'd be
 
       CREATE TABLE categories (           id_category          serial PRIMARY KEY,           id_category_parent
integer,
           FOREIGN KEY (id_category_parent)               REFERENCES categories (id_category)               ON DELETE
CASCADE      );
 


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com