Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Arbol en Mysql

Foro sobre el popular gestor de base de datos MySQL.

Arbol en Mysql

Notapor Gildus el Mar Dic 23, 2003 6:51 pm

Hola amigos, como podria representar o de que manera podria implementar una base de datos en MySQL, bueno el caso es un arbol dee 5 niveles, en el cual cada nodo tiene 5 hijos y asi sucesivamente hasta llegar a 625 nodos todo esto en 5 niveles...


Gracias por sus sugerencias...
Gildus
Programador
Programador
 
Mensajes: 189
Registrado: Mar Jun 17, 2003 12:23 pm

Arbol en Mysql

Notapor ShinKudo el Lun Ago 30, 2004 7:53 pm

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.
ShinKudo
Novato
Novato
 
Mensajes: 1
Registrado: Lun Ago 30, 2004 6:23 pm

Re: Arbol en Mysql

Notapor latindeveloper el Mar Ago 31, 2004 4:29 pm

Mmmmm...

Muy didactica tu respuesta... :idea:


te felicito!!! :wink:
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru


Volver a MySQL

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados