Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Arboles en MySQL (alternativas)

Estas en el tema de Arboles en MySQL (alternativas) en el foro de Mysql en Foros del Web. Hola a todos! Bueno como dice el asunto estoy buscando alternativas para implementar una estructura de arbol en MySQL. Crei que esto iba a ser ...
  #1 (permalink)  
Antiguo 15/08/2010, 09:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 6 meses
Puntos: 11
Arboles en MySQL (alternativas)

Hola a todos!
Bueno como dice el asunto estoy buscando alternativas para implementar una estructura de arbol en MySQL.
Crei que esto iba a ser algo sencillo porque es una tarea bastante común, pero parece que no es tan así.

Para los que quieran entender mejor sobre los problemas de los arboles en un sistema SQL y mas precisamente en MySQL lean esto:

http://explainextended.com/2009/09/2...ts-postgresql/
http://explainextended.com/2009/09/2...ed-sets-mysql/

Estaba empezando a diseñar mi BD con el modelo de Adjacency List, pero dado que MySQL no soporta recursividad (y su implementacion mediante funciones no es de lo mas elegante ni rapida), y dado que el modelo Nested Sets no me convence para nada (ademas que deberia usar tablas MyISAM para que ande bien y me rompe la integridad), no se como solucionarlo.

Se me ocurrió lo siguiente:
Hacer un Adjacency List, pero además de un campo "PADRE" poner un campo "HISTORIA_GENETICA"
En Historia_Genetica guardariamos todos los ancestros asi:
.198.116.90.43.20.12.
Asique para las 3 operaciones basicas:

1) Encontrar todos los descendientes de un nodo
2) Encontrar todos los ancestros de un nodo
3) Encontrar todos los descendientes de un nodo hasta cierto nivel


Son siempre a lo sumo 2 consultas y bastante simples:
(supongamos el nodo con id=28)

1) SELECT * FROM Arbol WHERE Historia_Genetica LIKE '%.28.%' GROUP BY Historia_Genetica

2) SELECT Historia_Genetica FROM Arbol WHERE id=28
$arrayIDs = split(historiaGenetica)
SELECT * FROM Arbol WHERE id IN (lista de IDs)

3) SELECT * FROM Arbol WHERE Historia_Genetica LIKE '%.28.%' AND NOT LIKE '%.28.%.%.%.' GROUP BY Historia_Genetica


Agregar o borrar elementes del arbol es bastante sencillo tambien, solo tenemos que modificar la historia genetica de ese elemento.

En principio me pareció la solución mas sencilla y además mas rapida. Pero no la vi en ningun lugar asique obviamente debe tener problemas graves sino por que nadie la usa?

Alguien sabe cual es el problema con esta solucion?

Saludos !!!
Enrique.
  #2 (permalink)  
Antiguo 16/08/2010, 17:21
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años, 6 meses
Puntos: 11
Respuesta: Arboles en MySQL (alternativas)

bueno el tema no fue todo un boom!
pero dejo algo de ayuda para quien le interese.

Esta tecnica en realidad no es nada nuevo y si se usa bastante, con diferentes estrategias.
El que quiera saber mas que busque:
"materialized paths"

Saludos!

Etiquetas: arboles
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:24.