84 votos

Base de datos de Estructura de Árbol de Estructura de Datos

¿Cuál sería la mejor manera de implementar un personalizables (es decir, una estructura de árbol con un número desconocido de nivel) árbol de estructura de datos en una base de datos?

He hecho esto una vez antes de utilizar una tabla con una clave externa a sí mismo.

¿Qué otras implementaciones pudo ver, y esta aplicación sentido?

45voto

JeremyDWill Puntos 2181

Usted mencionar los más comúnmente implementado, el cual es de Adyacencia de Lista: https://www.simple-talk.com/content/article.aspx?article=1234

Hay otros modelos, incluyendo la ruta materializada y conjuntos anidados: http://communities.bmc.com/communities/docs/DOC-9902

Joe Celko ha escrito un libro sobre este tema, lo cual es una buena referencia de un general de SQL perspectiva (que se menciona en el conjunto anidado artículo enlace de arriba).

También, Itzik Ben-Gann tiene una buena visión general de las opciones más comunes en su libro "Inside Microsoft SQL Server 2005: T-SQL de la Consulta".

Los elementos principales a considerar en la elección de un modelo son:

1) la Frecuencia de cambio de la estructura - ¿con qué frecuencia la estructura real del árbol de cambio. Algunos modelos ofrecen una mejor estructura, características de actualización. Es importante separar los cambios en la estructura de otros cambios de datos sin embargo. Por ejemplo, puede que desee modelo el organigrama de una compañía. Algunas personas este modelo como una lista de adyacencia, utilizando el ID de empleado para vincular a un empleado a su supervisor. Usualmente es un sub-óptimo de enfoque. Un enfoque que a menudo funciona mejor es el modelo de la estructura organizativa independiente de los propios empleados, y mantener al empleado como un atributo de la estructura. De esta manera, cuando un empleado deja la empresa, la estructura organizativa en sí mismo no necesita cambios, sólo la asociación con el empleado que a la izquierda.

2) Es el árbol de la escritura pesada o leer-pesado - algunas estructuras funcionan muy bien cuando la lectura de la estructura, sino que se produzca una sobrecarga adicional al escribir a la estructura.

3) ¿Qué tipo de información necesita para obtener a partir de la estructura de algunas estructuras de excel en la prestación de determinados tipos de información acerca de la estructura. Ejemplos son la búsqueda de un nodo y todos sus hijos, la búsqueda de un nodo y todos sus padres, encontrando el recuento de nodos secundarios que cumplan con ciertas condiciones, etc. Usted necesita saber qué información se necesita de la estructura para determinar la estructura que mejor se adapten a tus necesidades.

30voto

Ayman Hourieh Puntos 39435

Una mirada a la Gestión Jerárquica de Datos en MySQL. Se describen dos enfoques para el almacenamiento y la administración jerárquica (árbol) de datos en una base de datos relacional.

El primer enfoque es la lista de adyacencia del modelo, que es lo que esencialmente se describen: tener una clave externa que hace referencia a la tabla en sí. Si bien este enfoque es simple, puede ser muy ineficiente para determinadas consultas, como la construcción de todo el árbol.

El segundo enfoque se discutió en el artículo es el conjunto anidado modelo. Este enfoque es mucho más eficiente y flexible. Consulte el artículo de la explicación detallada y ejemplos de consultas.

7voto

yurilo Puntos 1564

Si usted tiene que utilizar la Base de datos Relacional para organizar árbol de estructura de datos, a continuación, Postgresql ha fresco ltree módulo que proporciona el tipo de datos para representar las etiquetas de los datos almacenados en una estructura jerárquica de tipo árbol. Usted puede obtener la idea de allí.(Para obtener más información, consulte: http://www.postgresql.org/docs/9.0/static/ltree.html)

En común LDAP se usa para organizar los registros en la estructura jerárquica.

1voto

Aaron Daniels Puntos 6052

Tener una tabla con una clave externa a sí mismo tiene sentido para mí.

Usted puede usar una expresión de tabla común en SQL o de conectarse antes de la declaración de Oracle para construir su árbol.

1voto

emzero Puntos 1152

Yo he utilizado la siguiente implementación en SQL SERVER 2005. Verifique aquí

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X