Arbol en Mysql

Foro sobre el popular gestor de base de datos MySQL.

Arbol en Mysql

Notapor Gildus » 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
Colaborador
Colaborador
 
Mensajes: 191
Registrado: Mar Jun 17, 2003 12:23 pm


Arbol en Mysql

Notapor ShinKudo » 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
  1.  

  2. create table self_key_table(

  3.   id  numeric not null,  -- el identificador de la tabla

  4.   self_key_id numeric,   -- el identificador a si misma

  5.   data varchar(25) );    -- la info. que se va a almacenar

  6.  

  7. alter table self_key_table add constraint

  8.     self_key_table_pk primary key (id)

  9.  

  10. alter table self_key_table add constraint

  11.     self_key_fk foreign key (self_key_id)

  12.     references self_key_table( id )

  13.  

  14. -- Ahora insertamos datos en la tabla

  15. -- Esta seria la raíz del árbol nivel 0

  16. insert into self_key_table( id, self_key_id, data)

  17. values(1,null,'México')

  18.  

  19. -- La primer rama 1° nivel

  20. insert into self_key_table( id, self_key_id, data)

  21. values(2,1,'Estado de México')

  22.  

  23. -- La siguiente rama 2° nivel

  24. insert into self_key_table( id, self_key_id, data)

  25. values(3,2,'Nezahualcoyotl')

  26.  

  27. -- 2° nivel

  28. insert into self_key_table( id, self_key_id, data)

  29. values(4,2,'Naucalpan')

  30.  

  31. -- 1° nivel

  32. insert into self_key_table( id, self_key_id, data)

  33. values(5,1,'Guanajuato')

  34.  

  35. -- 2° nivel

  36. insert into self_key_table( id, self_key_id, data)

  37. values(6,5,'Celaya')

  38.  

  39. -- 2° nivel

  40. insert into self_key_table( id, self_key_id, data)

  41. values(7,5,'León')

  42.  



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
  1.  

  2. SELECT a.id, a.data, b.self_key_id AS pid, b.data as data_node

  3.   FROM self_key_table AS a

  4.   LEFT JOIN self_key_table AS b

  5.             ON a.id = b.self_key_id

  6.  ORDER BY a.id, a.data, b.data

  7.  

  8.   id data                pid data_node

  9. ---- ------------------- --- ------------------

  10.    1 México                1 Estado de México

  11.    1 México                1 Guanajuato

  12.    2 Estado de México      2 Naucalpan

  13.    2 Estado de México      2 Nezahualcoyotl

  14.    3 Nezahualcoyotl

  15.    4 Naucalpan

  16.    5 Guanajuato            5 Celaya

  17.    5 Guanajuato            5 León

  18.    6 Celaya

  19.    7 León

  20.  



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 latindev » Mar Ago 31, 2004 4:29 pm

Mmmmm...

Muy didactica tu respuesta... :idea:


te felicito!!! :wink:
Avatar de Usuario
latindev
Administrador
Administrador
 
Mensajes: 1062
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