miércoles, 14 de septiembre de 2011

Modelo de Datos Jerárquico

El sistema jerárquico más comúnmente conocido es el sistema IMS de IBM. Esta base de datos tiene como objetivo establecer una jerarquía de fichas, de manera que cada ficha puede contener a sus vez listas de otras fichas, y así sucesivamente.

1. Estructuras del Modelo de Datos Jerárquico

A diferencia del modelo relacional, el modelo jerárquico no diferencia una vista lógica de una vista física de la base de datos. De manera que las relaciones entre datos se establecen siempre a nivel físico, es decir, mediante referencia a direcciones físicas del medio de almacenamiento (sectores y pistas).

Los datos se almacenan en la forma de registros, el equivalente a las filas del modelo relacional. Cada registro consta de un conjunto de campos, el equivalente a las columnas del modelo relacional. Un conjunto de registros con los mismos campos se denomina fichero (record type), el equivalente a las tablas del modelo relacional.

Se puede encontrar tres tipos de segmentos:
  • SEGMENTO PADRE: Es aquél que tiene descendientes, todos ellos localizados en el mismo nivel. 
  • SEGMENTO HIJO: Es aquél que depende de un segmento de nivel superior. Todos los hijos de un mismo padre están en el mismo nivel del árbol.
  • SEGMENTO RAÍZ: El segmento raíz de una base de datos jerárquica es el padre que no tiene padre. La raíz siempre es única y ocupa el nivel superior del árbol. 

2. Vínculos virtuales Padre-Hijo

El modelo jerárquico facilita relaciones padre-hijo o relaciones 1:N (de uno a varios), pero las relaciones son unidireccionales. Es decir, dichas relaciones son hijo-padre, pero no padre-hijo.

Esto implica que solamente se puede consultar la base de datos desde los nodos hoja hacia el nodo raíz. La consulta en el sentido contrario requiere una búsqueda secuencial por todos los registros de la base de datos. En las bases de datos jerárquicas no existen índices que faciliten esta tarea.

No existen relaciones N:M (de muchos a muchos) en el modelo jerárquico a menos que se simulen mediante varias relaciones 1:N. No obstante, esto puede provocar problemas de inconsistencia, ya que el gestor de base de datos no controla estas relaciones.

Las relaciones se establecen mediante punteros entre registros. Es decir, un registro hijo contiene la dirección física en el medio de almacenamiento de su registro padre. Esto tiene una ventaja fundamental sobre las bases de datos relacionales: el rendimiento. El acceso de un registro a otro es prácticamente inmediato sin necesidad de consultar tablas de correspondencia.

3. Restricciones / Limitaciones del modelo Jerárquico
  • Duplicidad de registros: No garantiza que no existan dos o más registros iguales en determinados campos (incluyendo campos clave).
  • Intergridad referencial: tampoco garantiza que un registro hijo esté relacionado con un registro padre válido, ya que se puede borrar un nodo padre sin eliminar los nodos hijo, de manera que éstos últimos están relacionados con un registro inexistente.
  • Desnormalización: No tiene controles que impidan la desnormalización, como campos clave. Esto puede generar:
    • Combinación de relaciones
    • Duplicación de atributos no claves
    • Introducción de grupos repetitivos
    • Creación de tablas de extracción

4. Transformación E-R en el modelo jerárquico
  • Interrelaciones 1:N con cardinalidad mínima 1 en la entidad padre
En este caso no existe ningún problema y el esquema jerárquico resultante será prácticamente el mismo que en el ME/R. 

  • Interrelaciones 1:N con cardinalidad mínima 0 en el registro propietario. 
El problema es que podrían existir hijos sin padre, por lo que o se crea un padre ficticio para estos casos o se crean dos estructuras arborescentes. 



La primera estructura arborescente tendrá como nodo padre el tipo de registro A y como nodo hijo los identificadores del tipo de registro B. De esta forma no se introducen redundancias, estando los atributos de la entidad B en la segunda arborescencia, en la cual sólo existiría un nodo raíz B sin descendientes. 
  • Interrelaciones N:M 
La solución es muy parecida, creándose también dos arborescencias. 



La solución es independiente de las cardinalidades mínimas. Se podría suprimir, en la primera arborescencia o en la segunda, el registro hijo, pero no se conservaría la simetría. 
  • Interrelaciones reflexivas 
La jerarquía a) se utilizaría siempre que se desee obtener la explosión.  La aplicación de estas normas de diseño evita la introducción de redundancias, así como la pérdida de simetría, pero complica enormemente el esquema jerárquico resultante que estará constituido por más de un árbol, lo que no resulta fácilmente comprensible a los usuarios.



5. Lenguaje de manipulación de datos

Una instrucción de un lenguaje de manipulación constará: 

  • Un operador que indica el tipo de operación a realizar. 
  • Los datos sobre los que se lleva a cabo la operación. 
  • Una condición, que servirá para seleccionar el conjunto de datos sobre el que se desea trabajar, y que es una expresión de tipo lógico, es decir, constantes y variables unidas por operadores de comparación y del álgebra de Boole.
1. Definiciones:

Declaración de un esquema jerárquico:
 SCHEMA NAME = <nombre del esquema> 
 <declaraciones de árboles> 

Declaración de un árbol:
 TREE <nombre> <lista de declaraciones de tipos de registros> 

Declaración de tipo de registro:
 RECORD <nombre> <información> 

La información es de las siguientes clases: 
 a) Campos:   <n1_nivel> <nombre> <tipo> 
 b) Posición: ROOT │PARENT = <nombre> 
 c) Registro virtual (opcional): VIRTUAL <nombre-registro> IN <nombre_árbol>  13
 d) Punteros: POINTER = [PARENT│<lista tipos de punteros>]

2. Consultas

Se realizan con la orden GET:
 1) Localiza un registro en la BD y hace que el puntero de dirección indique a él. 
 2) Copia dicho registro a la plantilla del área de trabajo 
Clases de Consultas:

- GET FIRST <tipo_registro> [WHERE <condición>] 
Localiza el primer registro del tipo indicado. si hay cláusula where, se localiza el primero que cumple la condición. También se usa como GET UNIQUE. 

- GET NEXT <tipo_registro> [WHERE <condición>] 
Localiza el siguiente registro del tipo indicado. Si hay cláusula where, se localiza el siguiente que cumple la condición. 

- GET NEXT WITHIN PARENT <tipo_registro> [WHERE <condición>] 
Localiza el siguiente registro del tipo indicado, dentro de un subárbol cuya raíz es el último 
registro localizado con GET FIRST o GET NEXT. Si hay cláusula where, se localiza el siguiente que cumple la condición. 

Consultas con retención del registro:
El usuario que hace la consulta retiene el registro hasta que lo libera. El registro está bloqueado y no pueden acceder a él los demás usuarios. Las órdenes con retención son equivalentes a las anteriores: 
   GET HOLD { FIRST │NEXT │NEXT WITH} 

3. Actualizaciones

Las operaciones se realizan a nivel de registro. Los registros se almacenan desde las plantillas del área de trabajo. 

- INSERT <tipo_registro> [WHERE <condición>] 
El registro se inserta en la primera posición de la base de datos donde se pueden colocar registros de ese tipo. Si hay cláusula where el sistema busca un registro que satisfaga la condición, y el registro recién creado se inserta como su hermano más a la izquierda. 

- REPLACE 
Sustituye el contenido de un registro con el de la plantilla del área de trabajo. Dicho registro debe haber sido recuperado previamente con un GET HOLD ... para que el puntero de dirección señale hacia él. 

- DELETE 
Elimina un registro. Dicho registro debe haber sido recuperado previamente con un GET HOLD ... para que el puntero de dirección señale hacia él.


6. Ejemplos



No hay comentarios:

Publicar un comentario en la entrada