Достичь иерархии, отношений родитель-потомок эффективным и простым способом

У меня есть такая таблица, как

create table site
(
site_Id int(5),
parent_Id int(5),
site_desc varchar2(100)
);

Значение полей:

  • site_Id : идентификатор сайтов
  • parent_Id : родительский идентификатор сайта
  • site_desc : хотя и не относится к вопросу, но у него есть описание сайта

Требование состоит в том, что если у меня есть site_id в качестве входных данных, и мне нужны все идентификаторы, помеченные ниже сайта. Например:

                    A
                   / \
                  B   C
                / | \ /\
               D  E F G H
              /\
             I  J

Все узлы имеют site_Id.

Таблица содержит такие данные:

Site_id  | Parent_ID  |  site_desc
_________|____________|___________
 A       |   -1       |   
 B       |    A       |
 C       |    A       |
 D       |    B       |
 E       |    B       |
 F       |    B       |
 I       |    D       |
 J       |    D       |

......

A является родителем B и C и так далее.

Если B является заданным входом, тогда запрос должен получить D, E, I, F, J.

В настоящее время это достигается с помощью нескольких запросов в цикле, но я думал добиться этого за минимальное количество запросы.

В настоящее время я занимаюсь следующим:

голос против

Алгоритм выглядит следующим образом:

Initially create a data set object which you will populate, by fetching data from the data base. 
Create a method which takes the parent id as parameter and returns its child nodes if present, and returns -1, if it doesnt have a child. 
Step1: Fetch all the rows, which doesn't have a parent(root) node. 
Step2: Iterate through this result. For example if prod1 and prod2 are the initial returned nodes, in the resultset. 
Iterating this RS we get prod1, and we insert a row in our DataSET obj. 
Then we send the id of prod1 to getCHILD method, to get its child, and then again we iterate the returned resultset, and again call the getCHILD method, till we dont get the lowest node.

Мне нужен наилучший оптимизированный метод в рамках ограничения моей модели данных. Не стесняйтесь отвечать, если у вас есть какие-либо предложения.
Пожалуйста, предложите что-нибудь. Заранее спасибо.

15
задан Bill Karwin 11 July 2013 в 00:55
поделиться