Bueno, parece que la respuesta es un poco tardía, pero bien vale la pena hacer la observación de que cualquier base de datos respetable puede manejar lo que tu llamas árbol, en realidad la representación que se le da en forma de tabla a los árboles es como una tabla recursiva, esto es, una tabla que se referencía a si misma, por ejemplo:
- Código: Seleccionar todo
create table self_key_table(
id numeric not null, -- el identificador de la tabla
self_key_id numeric, -- el identificador a si misma
data varchar(25) ); -- la info. que se va a almacenar
alter table self_key_table add constraint
self_key_table_pk primary key (id)
alter table self_key_table add constraint
self_key_fk foreign key (self_key_id)
references self_key_table( id )
-- Ahora insertamos datos en la tabla
-- Esta seria la raíz del árbol nivel 0
insert into self_key_table( id, self_key_id, data)
values(1,null,'México')
-- La primer rama 1° nivel
insert into self_key_table( id, self_key_id, data)
values(2,1,'Estado de México')
-- La siguiente rama 2° nivel
insert into self_key_table( id, self_key_id, data)
values(3,2,'Nezahualcoyotl')
-- 2° nivel
insert into self_key_table( id, self_key_id, data)
values(4,2,'Naucalpan')
-- 1° nivel
insert into self_key_table( id, self_key_id, data)
values(5,1,'Guanajuato')
-- 2° nivel
insert into self_key_table( id, self_key_id, data)
values(6,5,'Celaya')
-- 2° nivel
insert into self_key_table( id, self_key_id, data)
values(7,5,'León')
En la tabla anterior lo que podemos observar es lo siguiente: todos aquellos registros en los que la columna self_key_id sea nula serán las raíces del árbol, es decir, el punto donde comienzan a partir las ramas; ahora, todos aquellos registros contengan información dentro de la columna self_key_id serán por tanto las ramas del árbol, pudiendo tener una profundidad infinita (mas bien lo que la base de datos permita para el tipo numérico).
Para poder ver esta información a dos niveles podemos ejecutar el siguiente query:
- Código: Seleccionar todo
SELECT a.id, a.data, b.self_key_id AS pid, b.data as data_node
FROM self_key_table AS a
LEFT JOIN self_key_table AS b
ON a.id = b.self_key_id
ORDER BY a.id, a.data, b.data
id data pid data_node
---- ------------------- --- ------------------
1 México 1 Estado de México
1 México 1 Guanajuato
2 Estado de México 2 Naucalpan
2 Estado de México 2 Nezahualcoyotl
3 Nezahualcoyotl
4 Naucalpan
5 Guanajuato 5 Celaya
5 Guanajuato 5 León
6 Celaya
7 León
NOTA: Esta consulta esta creada en MySQL. si quieres ver una consulta sofisticada te recomiendo que investigues la sintaxis de oracle connect by [campo] start with [condición], dicha notación puede representar el árbol en toda su extensión dandole la presentación de raíz-rama.
De la información que arroja el query anterior podemos observar lo siguiente:
1.- [México] es la raíz del árbol porque nunca lo vemos del lado derecho de los resultados.
2.- [Guanajuato] es una rama intermedia porque aparece de en ambos lados de los resultados (a la derecha y a la izquierda), es decir como rama y como nodo.
3.- León es una de las hojas del árbol, porque a la derecha de el no existe ninguna otra rama.
Saludos, Espero que sirva.