2008-08-26 14 views
5

Hasta ahora he encontrado una lista de adyacencia, conjuntos anidados e intervalos anidados como modelos para almacenar estructuras de árbol en una base de datos. Los conozco lo suficiente y he migrado árboles de uno a otro.¿Qué son los modelos para almacenar estructuras de árboles y cuáles son sus características?

¿Qué son otros modelos populares? ¿Cuáles son sus características? ¿Cuáles son los buenos recursos (libros, web, etc.) sobre este tema?

No solo busco el almacenamiento de db sino que me gustaría ampliar mis conocimientos sobre los árboles en general. Por ejemplo, entiendo que los conjuntos/intervalos anidados son especialmente favorables para el almacenamiento de bases de datos relacionales y me he preguntado, ¿son realmente una elección mala en otros contextos?

Respuesta

1

El recurso fundamental para esto son los capítulos 28-30 de SQL for Smarties.

(He recomendado este libro tanto Calculo Celko me debe las regalías por ahora!)

2

Una variación es donde se usa una representación jerárquica directa (es decir, un enlace principal en el nodo), pero también se almacena un valor de ruta.

es decir. para un árbol de directorios que consiste en lo siguiente:

C:\ 
    Temp 
    Windows 
     System32 

usted tendría los siguientes nodos está indexada

Key  Name  Parent  Path 
1  C:     *1* 
2  Temp  1  *1*2* 
3  Windows 1  *1*3* 
4  System32 3  *1*3*4* 

Path, y le permitirá realizar rápidamente una consulta que recoge un nodo y todos sus niños, sin tener que manipular rangos.

es decir. para encontrar C: \ Temp y todos sus hijos:

WHERE Path LIKE '*1*2*%' 

Esta representación es el único lugar en el que puedo pensar en que el almacenamiento de en una cadena como esto está bien, id.

+0

Eso sería un híbrido de Lista de adyacencia y Ruta materializada, ¿verdad? ¿En qué escenarios se usaría eso? Me parece que recibir a todos los niños con una sola consulta sería mejor atendido con Conjuntos/Intervalos Anidados y tampoco veo para qué querrías almacenar la lista de adyacencia. –

0

@lassevk: This article habla de su enfoque en más detalle y proporciona fragmentos de código.

Espero que esto ayude.

Cuestiones relacionadas