data database data-structures tree hierarchical-data

database - data - Cómo representar una estructura tipo árbol en un DB



tree in mysql database (2)

Asegúrese de utilizar algún tipo de codificación de bajo nivel para la entidad que se está procesando para evitar el bucle. La entidad puede ser una parte, tema, carpeta, etc.

Con un archivo Entity y un archivo Entity-Xref, puede recorrer una de las dos relaciones entre los dos archivos, una relación principal y otra secundaria.

Un nivel es el nivel que una entidad encuentra en un árbol. Un código de bajo nivel para la entidad es el nivel más bajo que se encuentra una entidad en cualquier árbol en cualquier lugar. Verifique que el código de bajo nivel de la entidad que desea crear como hijo sea menor o igual para evitar un ciclo. después de agregar una entidad como un niño, se volverá al menos un nivel más bajo.

Estoy comenzando un proyecto y estoy en la fase de diseño: es decir, aún no he decidido qué marco de db voy a utilizar. Voy a tener un código que crea una estructura tipo "bosque". Es decir, muchos árboles, donde cada árbol es un estándar: nodos y bordes. Después de que el código crea estos árboles, quiero guardarlos en el archivo db. (y luego sacarlos eventualmente)

El enfoque ingenuo para representar los datos en el DB es un DB relacional con dos tablas: nodos y bordes. Es decir, la tabla de nodos tendrá una identificación de nodo, datos de nodo, etc. Y la tabla de bordes será una asignación de id de nodo a id de nodo.

¿Hay un mejor enfoque? ¿O teniendo en cuenta las suposiciones (limitadas) que estoy dando, este es el mejor enfoque? ¿Qué tal si agregamos la suposición de que los árboles son relativamente pequeños? ¿Es mejor guardar todo el árbol como una mancha en el DB? ¿Qué tipo de db debería usar en ese caso? Por favor, comenten sobre velocidad / escalabilidad.

Gracias


Mostré una solución similar a sus tablas de nodos y bordes, en mi respuesta a la pregunta de : ¿Cuál es la forma más eficiente / elegante de analizar una tabla plana en un árbol? Llamo a esta solución "Tabla de cierre".

Hice una presentación sobre diferentes métodos de almacenamiento y uso de árboles en SQL, Modelos para datos jerárquicos con SQL y PHP . Demostré que con los índices correctos (dependiendo de las consultas que necesita ejecutar), el diseño de la tabla de cierre puede tener muy buen rendimiento, incluso en grandes colecciones de bordes (alrededor de 500K de bordes en mi demostración).

También cubrí el diseño en mi libro, SQL Antipatterns: evitar las trampas de la programación de bases de datos .