Thread: cascading delete - recursivity
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 !
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]
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