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



Modelo de Base de Datos de red

1. Estructuras del Modelo de Datos de Red

En este modelo, se compone de una componente estática y otra dinámica. La estática estaría compuesta por los objetos (entidades o nodos y atributos), las interrelaciones o arcos y las restricciones, que a su vez pueden ser inherentes (no tenemos en este modelo) y de usuario (pueden ser reconocidas por el modelo de datos o de responsabilidad exclusiva del usuario). Dentro de la componente estática podemos citar un elemento más que atendería a la representación, y son los grafos.

Por otro lado, la componente dinámica estaría compuesta por el aspecto navegacional. El esquema en si representa los aspectos estáticos, es decir, la estructura de los datos, que comprende los tipos de entidades, interrelaciones, etc. Una ocurrencia del esquema son los valores que toman los elementos del esquema en un determinado momento. Estos valores irán variando a lo largo del tiempo debido a la aplicación de los operadores de manipulación de datos a una ocurrencia del esquema.
El modelo es muy flexible debido a la inexistencia de restricciones inherentes. Esto implica dificultad a la hora de implementarlo físicamente y a la larga poco eficiente. Es por esto que el modelo sea tan solo teórico, y que a la hora de llevarlo a la practica se introduzcan restricciones.
2. Restricciones / Limitaciones del modelo de Red

En el modelo en red no se ha especificado ningún tipo de restricción en lo que respecta a las interrelaciones. Esto quizá haga del modelo en red un modelo tremendamente sencillo de utilizar, pero no deja de tener un carácter general y provoca que en la práctica su instrumentación no resulte nada fácil.
Es por esto, que los SGBD que se basan en el modelo en red, deben añadir una serie de restricciones a fin de poder implementar la base de datos físicamente y obtener un mayor rendimiento del sistema.
Un modelo de datos de este tipo, es el denominado modelo Codasyl. Este modelo es una simplificación del modelo en red general. Aquí solo se admiten ciertos tipos de interrelaciones, y además se incluyen otras restricciones adicionales. Estas restricciones no limitan demasiado la flexibilidad original del modelo en red general, pero nos permiten tener una instrumentación eficiente.

El modelo Codasyl definió una serie de elementos básicos que definían su estructura de datos. Son los siguientes:
  • Agregado de datos: Se asemeja a los campos de un fichero o a los atributos de otros modelos.
  • Elemento de datos: Unidad de datos más pequeña que se puede referenciar. Puede ser de distintos tipos, y puede definirse como dependiente de valores de otros elementos (datos derivados).
  • Registro: Colección nominada de elementos de datos. Unidad básica de acceso y manipulación. Se asemeja a los registros en ficheros y a las entidades en el modelo E/R.
  • Conjunto (SET): Colección nominada de dos o mas tipos de registros que establece una vinculación entre ellos. Origen de muchas restricciones. Las interrelaciones 1:N se representan aquí mediante SET.
  • Área: Subdivisión nominada del espacio direccionable de la base de datos que contiene ocurrencias de registros.
  • Clave de base de datos: identificador interno único para cada ocurrencia de registro. Proporciona su dirección en la base de datos. Es un obstáculo para conseguir la independencia lógica / física. Suponía problemas el reutilizar una clave cuando se reorganizaba la base de datos.
CARACTERÍSTICAS BÁSICAS DEL MODELO CODASYL

Se pueden resumir las características básicas del modelo en :
  • Un SET es una colección nominada de dos o más tipos de registros que representan un tipo de interrelación 1:N (en consecuencia también 1:1).
  • Cada SET tendrá un tipo de registro propietario y uno o más tipos de registros miembro.
  • El número de SET que se pueden declarar en el sistema es ilimitado.
  • Cualquier registro puede ser propietario de uno o varios SET.
  • Cualquier registro puede ser miembro de uno o varios SET.
  • Podrán existir SET singulares en los que el propietario es el sistema (una entidad se interrelaciona consigo mismo).
 RESTRICCIONES INHERENTES DEL MODELO CODASYL
Cuando hablábamos del modelo en red general, decíamos que era un modelo muy flexible a coste de no tener restricciones inherentes. Esta ausencia de restricciones hace que sea muy difícil de implementar, y a la larga suele reportar escaso rendimiento, por lo que como también decíamos no pasa de ser un modelo teórico.
El modelo Codasyl está basado en el modelo en red general, pero a diferencia de este, es un modelo utilizado. Esto es debido a que Codasyl a incluido restricciones inherentes que hacen que sea posible su implementación y que se obtenga un alto rendimiento del sistema. Las restricciones son las siguientes:
  • Solo se admiten tipos de interrelaciones jerárquicas de dos niveles (propietario y miembro). Si se admite la combinación de varios SET para generar jerarquías multinivel.
  • En el nivel propietario solo se permite un tipo de registro.
  • En el mismo SET no se permite que a un registro ser a la vez propietario y miembro, no está admitida la reflexividad. Aunque esta restricción se eliminó con el tiempo, los productos basados en Codasyl la siguen utilizando.
  • Una misma ocurrencia de miembro no puede pertenecer en un mismo tipo de SET a más de un propietario. Esto hace que se simplifique la implementación física de los SET, ya que sus ocurrencias se pueden organizar como una cadena.
3. Transformación E-R en el modelo de Red

Es posible diseñar una base de datos de red a partir de un esquema de Entidad-Relacion de la siguiente manera:
  • Entidades normales: Por cada entidad se crea un tipo de registro con todos sus atributos simples o compuestos como campos simples o compuestos. Sus atributos multivaluados se incluyen tambien , pero como campos vectoriales.
  • Entidadesd débiles: Estas son entidades que dependen de otra para poder existir. Para cada entidad débil se crea un tipo de regsitro que lo represente. Además debemos relacionarla con la entidad de la que depende, para ello la entidad fuerte de la qeu depende la débil viene ser propietario y la débil, miembro.
  • Vínculo uno-uno (1:1) y uno-muchos no recursivos: En el caso de la relación de uno a uno se elige cualquiera de los dos registros como propietario y al otro como miembro. En el caso de la relación de uno a muchos (1:N) se escoge como propietario al registro que representa a la entidad que está al lado 1 de la relación y como miembro al registro que representa a la entidad que esta al lado N de la relación.
  • Relaicones de muchos a muchos (N:M): Se crea un nuevo tipo de registro, el cual sera miembro de los dos registros que representan a las entidades de la relación.
  • Vínculos recursivos con vínculos de 1:1 o 1:N: Para ambos casos se crea un nuevo registro. El cual se unirá al registro que representa la entidad a través de tipo de conjuntos (flechas).
  • Vículos que relacionan a más de dos entidades: Para ello se crea un nuevo tipo de registro, el cual será el registro miembro de los registros que representan a las entidades. Y estos vendrían a ser los registros propietarios.
4. Programación de una Base de Datos de Red

Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.

Los comandos son:
  • SELECT ... FROM ... WHERE ... devuelve cero o más filas de una o más talas o vistas de la base de datos.
  • INSERT INTO ... VALUES ... añade uno o más registros a cualquier tabla.
  • UPDATE ... SET ... WHERE ... cambia los datos de uno o más registros de una tabla. Dependiendo de la condición, se pude actualizar todos los campos o todos los registros.
  • DELETE FROM ... WHERE ... elimina uno o más registros de una tabla.
5. Ejemplos