Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

niveles y subniveles indeterminados en una base de datos

Estas en el tema de niveles y subniveles indeterminados en una base de datos en el foro de Bases de Datos General en Foros del Web. Hola a todo el mundo: Tengo una duda para la que no se si hay solución a la hora de diseñar una base de datos. ...
  #1 (permalink)  
Antiguo 06/06/2011, 02:51
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 8 meses
Puntos: 2
niveles y subniveles indeterminados en una base de datos

Hola a todo el mundo:

Tengo una duda para la que no se si hay solución a la hora de diseñar una base de datos.

¿Cómo se puede hacer una base de datos en la que debe haber niveles y subniveles para almacenar la información, pero no sabemos para cada caso en concreto, cuántos subniveles hay?. Intento explicar lo que quiero solucionar:

Hay un esquema que se conoce como "diagrama de espina de pescado" para el estudio de las causas que generan un problema. Puede haber para un problema varias posibles causas, y cada una de estas causas pueden estar provocadas por unas "subcausas", que a su vez pueden tener "sub-subcausas" y así hasta un número indeterminado de niveles.

Tengo claro que si tengo un esquema de n niveles y subniveles, debo tener tantas tablas como subniveles halla relacionadas entre si, ¿pero qué ocurre cuando no se hasta el mismo momento de introducir la información cuántos niveles tengo (habrá ocasiones que necesite dos niveles, otros tres, otros siete, etc.)?, ¿cómo se puede gestionar este caso?.

Muchas gracias y un saludo a todos.
  #2 (permalink)  
Antiguo 06/06/2011, 05:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: niveles y subniveles indeterminados en una base de datos

En realidad, por extraño que te parezca, eso se resuelve simplemente con un campo FK en la tabla, que apunta a la PK de la misma tabla...
La idea es similar a un Árbol-B, donde cada una de las hojas puede ser "padre" de otras. Estas otras tienen en ese campo la PK de su registro padre, y a su vez son apuntadas por otro(s) registro(s) hijos.
El registro raíz es, en este caso, el único registro cuyo valor es NULL, porque no depende de ningún otro.
Este tipo de esquemas se usa para determinar la cadena de mando de empleados, donde la FK apunta a la del empleado Jefe de sección, departament, etc. A su vez, el registro del Jefe, apunta al del Gerente, y el del Gerente... bueno, eso dependerá de la organización.
Este modelo no es invento mío, es el esquema que se usa en las bases de datos de pruebas que tienen Oracle, SQL Server y otros más (la tabla, en Oracle, la encontrarás descripta en los manuales de los cursos oficiales).

Tip: A nivel de implementación el único problema es que requiere que las consultas sean creadas dinámicamente, porque a priori no conoces cuántos niveles tiene esa jerarquía.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/06/2011, 06:08
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 8 meses
Puntos: 2
Respuesta: niveles y subniveles indeterminados en una base de datos

Gracias por tu respuesta gnzsoloyo. Al poco de empezar el tema me di cuenta de que, efectivamente, lo que quería implementar es una estructura de árbol, y buscando buscando por la ed, he visto el siguiente enlace donde viene a explicar (en perfecto inglés eso si) lo que tú has señalado aquí. El enlace me parece de mucha utilidad ya que explica muy bien a base de ejemplos la implementación de este tipo de estructura.

http://dev.mysql.com/tech-resources/...ical-data.html

Muchas gracias de nuevo y un saludo.

Etiquetas: niveles, bases-de-datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:27.