Discussion:
Estructura de base de datos tipo arbol
(demasiado antiguo para responder)
Angus
2004-10-28 14:20:35 UTC
Permalink
Hola,

Necesito crear una base de datos con una jerarquía tipo arbol es decir, del
mismo modo que se organizan las carpetas y los archivos en el disco duro,
con unas carpetas que cuelgan de otras (con un número de niveles indefinido,
y al final siempre hay archivos.

En concreto lo que necesito crear es una base de datos en la que los
registros son las piezas de una máquina. La máquina se subdivide en
subconjuntos (carpetas) y estos en otros hasta que al final lo que tengo en
cada subconjunto tiene piezas (archivos). Al igual que sucede en el disco
duro, yo tengo piezas que tienen sólo un nivel de subconjuntos, (eJ
c:\pieza) y otras que están en el cuarto o quinto nivel
(c:\subconjunto1\subconjunto1.1\subconjunto1.1.1\pieza).

La cuestión es que no sé cómo organizar las relaciones o cómo crear las
tablas para poder después manejar los registros independientemente de dónde
estén (por ejemplo: buscar todos los .jpg del disco o de una carpeta
incluyendo todas sus subcarpetas). Creo que el problema está claro, ¿no?

¿Podeis ayudarme? Gracias de antemano. Saludos,

Agustín
Fabian Manassero
2004-10-28 14:51:56 UTC
Permalink
Angus:
Creo que deberías crear una tabla a la cual le agregas un campo con la
jerarquía de los registros, por ejemplo los principales serían 000000, luego
tendrias 010000, 010100, 010200, 010101etc, no se si soy claro, esto te
sirve para 3 niveles, pero puedes agregarle todos los que quieras y hasta en
forma dinámica si es necesario.
Luego buscas la forma de mostrarlos, pero he visto en la pagina del Buho un
ejemplo para llenar un treeview con datos de una tabla.
Espero te sirva.
Saludos
Fabian
Post by Angus
Hola,
Necesito crear una base de datos con una jerarquía tipo arbol es decir, del
mismo modo que se organizan las carpetas y los archivos en el disco duro,
con unas carpetas que cuelgan de otras (con un número de niveles indefinido,
y al final siempre hay archivos.
En concreto lo que necesito crear es una base de datos en la que los
registros son las piezas de una máquina. La máquina se subdivide en
subconjuntos (carpetas) y estos en otros hasta que al final lo que tengo en
cada subconjunto tiene piezas (archivos). Al igual que sucede en el disco
duro, yo tengo piezas que tienen sólo un nivel de subconjuntos, (eJ
c:\pieza) y otras que están en el cuarto o quinto nivel
(c:\subconjunto1\subconjunto1.1\subconjunto1.1.1\pieza).
La cuestión es que no sé cómo organizar las relaciones o cómo crear las
tablas para poder después manejar los registros independientemente de dónde
estén (por ejemplo: buscar todos los .jpg del disco o de una carpeta
incluyendo todas sus subcarpetas). Creo que el problema está claro, ¿no?
¿Podeis ayudarme? Gracias de antemano. Saludos,
Agustín
Eduardo Olaz
2004-10-28 15:48:16 UTC
Permalink
Lo que tú necesitas es una base de datos jerárquica.
Las bases de datos jerárquicas funcionan con una lógica diferente a la de
las relacionales, a base de punteros.
Access no es una base de datos jerárquica, sino relacional.
No obstante se puede emular las relaciones entre los datos
Solución:
Se me ocurre que la forma más simple es crear las ramas y, para poder
reproducir la estructura en árbol, hacer que cada rama contenga la siguiente
información:
1 .- Nivel en la estructura
Por ejemplo el tronco será el nivel 0
De el partirán 0, 1 ó más ramas de nivel 1
A su vez de cada una de éstas partirán 0, 1 ó más ramas de nivel 2, ...
2.- Información de las ramas que parten de cada rama hacia el siguiente
nivel

Por lo tanto, aparte de la información operativa, como puede ser el nombre
de la pieza, peso, costo, etc... cada rama tendrá un identificativo de la
misma, que podría llamarse idRama, un número que indicará el número de
nivel, y los id de las ramas que parten de ella.
Si de una rama no parte ninguna otra significa que es un extremo de la
estructura.

Para gestionar todo esto necesitaremos, como mínimo, 2 tablas

Tabla Ramas
idRama ¿Autonumérico?
idNivel (por ejemplo de 0 a n)
Campos identificativos, como Pieza, Costo, etc...

Tabla ConexionRamas
idRama
idRamaSiguiente

Tanto el campo idRama como el idRamaSiguiente estarán relacionados con el
campo idRama de la tabla Ramas
Por ejemplo, tenemos una estructura simple formada por
Un tronco
idRama 1
De él parten 2 ramas
idRama 2
idRama 3

A su vez la rama 2 se subdivide en otras 2
idRama 4
idRama 5

Con esta estructura tendremos los siguientes campos y registros:

Tabla Ramas
idRama idNivel Otros Campos
1 1 - - - -
2 2 - - - -
3 2 - - - -
4 3 - - - -
5 3 - - - -

La tabla ConexionRamas contendrá la siguiente información:

idRama idRamaSiguiente
1 2
1 3
2 4
2 5

Con esta información tienes los suficientes datos para reproducir la
estructura

Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

eduardoALGARROBAolaz.net
Post by Angus
Hola,
Necesito crear una base de datos con una jerarquía tipo arbol es decir, del
mismo modo que se organizan las carpetas y los archivos en el disco duro,
con unas carpetas que cuelgan de otras (con un número de niveles indefinido,
y al final siempre hay archivos.
En concreto lo que necesito crear es una base de datos en la que los
registros son las piezas de una máquina. La máquina se subdivide en
subconjuntos (carpetas) y estos en otros hasta que al final lo que tengo en
cada subconjunto tiene piezas (archivos). Al igual que sucede en el disco
duro, yo tengo piezas que tienen sólo un nivel de subconjuntos, (eJ
c:\pieza) y otras que están en el cuarto o quinto nivel
(c:\subconjunto1\subconjunto1.1\subconjunto1.1.1\pieza).
La cuestión es que no sé cómo organizar las relaciones o cómo crear las
tablas para poder después manejar los registros independientemente de dónde
estén (por ejemplo: buscar todos los .jpg del disco o de una carpeta
incluyendo todas sus subcarpetas). Creo que el problema está claro, ¿no?
¿Podeis ayudarme? Gracias de antemano. Saludos,
Agustín
Ricardo Hernández Sáez
2004-10-29 08:42:31 UTC
Permalink
Yo me decanto por distinguir entre piezas compuestas y simples.

Tenemos la tabla "Piezas" con IdPieza como cáve principal y una sola
tabla "Piezas_Componentes" con al menos dos campos: IdPiezaPpal e
IdPiezaComponente.

Este esquema tiene como característica principal que es recursivo: las
piezas se definen con piezas ... y puede tener la profundidad que nosotros
decidamos.

Un tubo de cobre aparece en la tabla Piezas pero no en la de
Piezas_Componentes. Un grifo idem de idem. Ahora bien, podemos tener:
IdPieza Descripcion
1 - Tubo de cobre 30cm
2 - Grifo Mod. xxxx
3 - Kit Grifo xxxx
, y en la tabla Piezas_Componentes
3,1
3,2

Siguiendo en esta línea:
IdPieza Descripcion
1 - Tubo de cobre 30cm
2 - Grifo Mod. xxxx
3 - Kit Grifo xxxx
4 - Lavavo Mod yyyy
5 - Lavado completo yyyy
, y en la tabla Piezas_Componentes
3, 1 (Grifo Mod. xxxx - Tubo cobre 30cm)
3, 2 (Grifo Mod. xxxx - Grifo Mod xxxx)
5, 4 (Lavado completo yyyy - Lavavo Mod yyyy)
5, 3 (Lavado completo yyyy - Kit Grifo xxxx)
Post by Angus
Hola,
Necesito crear una base de datos con una jerarquía tipo arbol es decir, del
mismo modo que se organizan las carpetas y los archivos en el disco duro,
con unas carpetas que cuelgan de otras (con un número de niveles indefinido,
y al final siempre hay archivos.
En concreto lo que necesito crear es una base de datos en la que los
registros son las piezas de una máquina. La máquina se subdivide en
subconjuntos (carpetas) y estos en otros hasta que al final lo que tengo en
cada subconjunto tiene piezas (archivos). Al igual que sucede en el disco
duro, yo tengo piezas que tienen sólo un nivel de subconjuntos, (eJ
c:\pieza) y otras que están en el cuarto o quinto nivel
(c:\subconjunto1\subconjunto1.1\subconjunto1.1.1\pieza).
La cuestión es que no sé cómo organizar las relaciones o cómo crear las
tablas para poder después manejar los registros independientemente de dónde
estén (por ejemplo: buscar todos los .jpg del disco o de una carpeta
incluyendo todas sus subcarpetas). Creo que el problema está claro, ¿no?
¿Podeis ayudarme? Gracias de antemano. Saludos,
Agustín
Loading...