Bez InnoDB moze byc ciezko.
Kod
CREATE TABLE kategorie (
id int(11) NOT NULL auto_increment,
parent int(11),
nazwa varchar(100) default NULL,
PRIMARY KEY (id),
KEY parent_ind (parent),
FOREIGN KEY (`parent`) REFERENCES `kategorie` (`id`) ON DELETE CASCADE
) TYPE=InnoDB;
CREATE TABLE powiazania (
first_id int(11) NOT NULL default '0',
second_id int(11) NOT NULL default '0',
depth int(11) NOT NULL default '0',
PRIMARY KEY (first_id,second_id),
KEY f_ind (first_id),
KEY s_ind (second_id),
FOREIGN KEY (`second_id`) REFERENCES `test.kategorie` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`first_id`) REFERENCES `test.kategorie` (`id`) ON DELETE CASCADE
) TYPE=InnoDB;
INSERT INTO kategorie VALUES (1,NULL,'sql');
INSERT INTO kategorie VALUES (2,1,'postgresql');
INSERT INTO kategorie VALUES (3,1,'oracle');
INSERT INTO kategorie VALUES (4,2,'linux');
INSERT INTO kategorie VALUES (5,3,'sco');
INSERT INTO kategorie VALUES (6,3,'linux');
INSERT INTO kategorie VALUES (7,7,'windows');
INSERT INTO kategorie VALUES (8,6,'glibc1');
INSERT INTO kategorie VALUES (9,6,'glibc2');
INSERT INTO powiazania VALUES (1,1,0);
INSERT INTO powiazania VALUES (1,2,1);
INSERT INTO powiazania VALUES (1,3,1);
INSERT INTO powiazania VALUES (1,4,2);
INSERT INTO powiazania VALUES (1,5,2);
INSERT INTO powiazania VALUES (1,6,2);
INSERT INTO powiazania VALUES (1,7,2);
INSERT INTO powiazania VALUES (1,8,3);
INSERT INTO powiazania VALUES (1,9,3);
INSERT INTO powiazania VALUES (2,2,0);
INSERT INTO powiazania VALUES (2,4,1);
INSERT INTO powiazania VALUES (3,3,0);
INSERT INTO powiazania VALUES (3,5,1);
INSERT INTO powiazania VALUES (3,6,1);
INSERT INTO powiazania VALUES (3,7,1);
INSERT INTO powiazania VALUES (3,8,2);
INSERT INTO powiazania VALUES (3,9,2);
INSERT INTO powiazania VALUES (4,4,0);
INSERT INTO powiazania VALUES (5,5,0);
INSERT INTO powiazania VALUES (6,6,0);
INSERT INTO powiazania VALUES (6,8,1);
INSERT INTO powiazania VALUES (6,9,1);
INSERT INTO powiazania VALUES (7,7,0);
INSERT INTO powiazania VALUES (8,8,0);
INSERT INTO powiazania VALUES (9,9,0);
Sprawdzone - dane prawidlowe i struktura tez sie zaklada.
usuwanie z takiej bazy jest proste: delete from kategorie where id = jakis
Tylko zwroc uwage na dodane pole parent - tylko dzieki niemu jest to mozliwe ( a przynajmniej dopoki nie mozna uzywac ORDER BY w zapytaniu DELETE FROM ... USING ...