sql >> Base de Datos >  >> RDS >> Mysql

almacenamiento de jerarquía mysql con árboles grandes

El diseño de conjuntos anidados es definitivamente difícil cuando necesita realizar actualizaciones frecuentes en el árbol. Terminas teniendo que volver a numerar grandes partes del árbol.

Una sugerencia para mitigar esto es usar números de coma flotante en lugar de números enteros. Si inserta un nuevo nodo en el árbol, es relativamente fácil encontrar algunos números FLOAT entre los números de conjuntos anidados del padre del nuevo nodo. Eventualmente puede llegar a los límites de precisión de un número de coma flotante, pero dado que su árbol no es muy profundo, eso no sucederá por mucho tiempo.

Otra técnica sobre la que he escrito la llamo Tabla de cierre . Este método de almacenamiento de jerarquías hace que sea mucho más fácil insertar/actualizar/eliminar nodos en un árbol grande sin necesidad de actualizar gran parte de su árbol. Y aún puede consultar todo el árbol o cualquier subárbol en una única consulta SQL no recursiva.

Para obtener más información sobre la tabla de cierre, consulte:

Re tu comentario:

La Lista de adyacencia es simple, tiene un mínimo de redundancia y admite relaciones FK, lo que no admite Conjuntos anidados. La lista de adyacencia admite la consulta de un árbol completo de profundidad arbitraria si usa consultas recursivas . Pero MySQL no admite consultas recursivas.

Si necesita consultar solo relaciones padre-hijo inmediatas (es decir, un nivel de profundidad), o consultar solo árboles de profundidad fija, entonces la lista de adyacencia está bien.