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.