From: Савилов Олег Subject: Древовидная структура По поводу древовидной структуры. В своих проектах давно использую "дерево". create table grps( id integer not null, idBoss integer, Name varchar(50), Number varchar(100), Lev smallint not null, consaraint pk_grps primary key(id), constraint fk_grps_grps foreign key (idBoss) references grps(id) ); Бывает необходимо получить все записи таблицы, где присутствует группа, соответствующие "Ветви и всем вдложениям". Для примера: Есть таблицы товарных групп (дерево) и товаров. В товаре присутствует ссылка на группу. (К примеру "Докторская " принадлежит группе "Вареные". А "Вареные": "Все товары"-"мясопродукты"-"колбасы"). Необходимо показать все товары принадлежащие группе "Колбасы" и ниже. Для этого вводится в таблицу с "деревом" поле Number в которой я указываю структуру данной ветви(К примеру '1.2.334'). Запрос получается очень простой (gds -товары, grps - товарные группы): select g.id, g.Plu, g.name, ..., gr.Name as grpname from gds g join grps gr on(gr.id=g.idGrp) where (grps.Number like :GrpNumber || '%'); параметр GrpNumber - структура ветви. А структуру создаю в триггере: create trigger grps_ti for grps active before insert position 0 as declare variable Lev integer; declare variable Number varchar(100); begin if (NEW.id is null) then NEW.id=gen_id(grps_gen, 1); Lev=0; Number=''; if (not (NEW.idBoss is null)) then select Number, Lev from grps where (ID = NEW.idBoss) into :Number, :Lev; NEW.Number = Number || cast (NEW.id as varchar (20)) || '.'; NEW.Lev = Lev+1; end^ C уважением, Савилов Олег. oleg@limak.ru