Tema 37 – Modelo de datos jerárquico y en red.

Tema 37 – Modelo de datos jerárquico y en red.

1. INTRODUCCIÓN

Las BDs se crean por problemas a la hora de diseñar programas eficientes capaces de manipular grandes volúmenes de información. Por ello se buscan diferentes soluciones y se crean los sistemas gestores de BDs.

Existen 3 alternativas en cuanto a su concepción y a la forma de representar la información:

Bases de datos relacionales

Bases de datos jerárquicas

Bases de datos en red

El modelo más utilizado es el relacional.

El modelo jerárquico estructura sus datos de manera escalonada (relación padre-hijo) similar a un árbol.

El modelo en red, un registro puede tener más de un padre, por lo cual, resulta más flexible.

2. MODELO JERÁRQUICO

La base de datos está constituida por un conjunto de registros (divididos en campos) y una serie de relaciones.

Las restricciones de este modelo son mucho más estrictas que las del modelo en red.

En el modelo jerárquico los registros se organizan formando árboles en el modelo en red tienen forma de grafo.

image

En este tipo de esquema observamos que Pepe y María imparten la misma asignatura. Por lo tanto, debemos repetir información. (Desventaja)

1.1 Diagramas de estructura de árbol

Sirven para representar el esquema conceptual de una base de datos jerárquica.

Cajas: Representa diferentes tipos de registros.

Líneas: Representa los enlaces entre los diferentes tipos de registros.

Todo hijo tendrá un solo padre (1:1), pero un padre puede tener varios hijos (1:N).

1.2 Paso de ER a DEA (diagrama estructura árbol)

Se puede establecer una correspondencia entre un esquema ER y su equivalente diagrama de estructura de árbol DEA.

N:  image

1:   image

1.2.1 Relaciones binarias 1:1 sin atributo

Es el caso más simple, nos limitamos a crear un registro (caja) por cada entidad del diagrama ER.

image

Quedaría de la siguiente forma en el diagrama DEA:

image

El diagrama DEA quedaría de la siguiente forma:

image

En este caso creamos un nuevo registro ficticio llamado <imparte> y añadimos enlaces del siguiente modo:

image

1.1.1 Relaciones binarias N:M

image

1.1.1 Relación ternaria

Supongamos, una relación entre 3 entidades diferentes como la descrita:

image

Este diagrama refleja la relación entre profesor, materia y grupo, de modo que un Profesor imparte una o varias materias a un grupo determinado.

Nos encontramos ante 2 posibles alternativas:

image

1.1 Área de trabajo

El sistema de BDs mantiene un área de almacenamiento que es utilizada por los programas que acceden a la BD.:

Plantillas de registro: El sistema mantendrá una plantilla para cada tipo de registro de la BD de forma que el programa o usuario pueda acceder a dicha información.

Punteros de actualidad: Punteros por cada árbol de la BD.

Indicadores de estado: Hacen la misma función que el modelo de red:

o DB-Status: Indica resultado de última operación. Valdrá 0 si ha ido bien.

o Db-Record-name: Nombre del registro accedido.

o Db-data-name: Nombre de la BD.

1.2 Acceso a registros

Se utiliza una orden básica para acceder a los datos, que cuenta con varias alternativas dependiendo del modo en que deseemos acceder.

1.2.1 Orden get

Sirve para acceder a los datos de la BD. Una vez localizada la información, la copia en las plantillas y actualiza los punteros.

Debe seguirse un orden para recorrer el árbol (preorden, inorden y postorden)

Get: localiza un registro y actualiza punteros

1.2.2 Localizar el primer registro

Para localizar un primer registro usamos la orden get con la siguiente sintaxis:

get first <registro> [where <condición>]

Localiza en preorden el primer registro del tipo especificado y que satisface la condición indicada en la cláusula “where”

En caso de errorà nos lo indica mediante la variable DB-status

Ejemplo: Localizar el profesor cuyo DNI sea “1111111”

get first profesor wherer profesor.dni=”1111111”

if (DB-status=0)

print (profesor.nombre)

1.2.3 Localizar siguiente

Dado que pueden existir varios registros que satisfagan la condición, necesitamos algún mecanismo que nos permita localizar el resto de los registros. Para esto usamos la orden con la siguiente sintaxis:

get next <registro> [where <condición>]

Ejemplo: Localizar todos los profesores de matemáticas

get first profesor where profesor.especialidad = “matemáticas”

while DB-status = 0 do

begin

print (profesor.nombre)

get next profesor where profesor.especialidad= “matemáticas”

end

1.2.4 Localización dentro de un árbol

Puede ocurrir que nos interese localizar un registro dentro de un árbol (subárbol)

Imaginemos la siguiente instancia de una base de datos, y supongamos que estamos interesados en localizar las asignaturas impartidas por María. En este caso la búsqueda debe limitarse a un subárbol, y debemos emplear la siguiente orden:

get next within parent <reg> [where <cond>]

Ejemplo: mostrar todas las asignaturas impartidas por María.

get first profesor where profesor.nombre = “Maria”

get next within parent asignatura

while DB-status = 0 do

begin

print (asignatura.nombre)

get next within parent asignatura

end

1.3 Creación de registros

Rellenamos en primer lugar las plantillas adecuadas y a continuación usamos la orden insert, con la siguiente sintaxis:

Insert <registro> [where <cond>]

Si se especifica una condición, el registro será insertado como hijo del primer registro que cumpla dicha condición. En caso contrario se creará como hijo el primer registro en preorden.

Ejemplo:

asignatura.nombre = “Fundamentos de programación”

insert asignatura where profesor.dni= “1111111”

1.4 Modificación de registros

Debemos modificar los datos de la plantilla correspondiente, y a continuación actualizar la base de datos con la orden replace.

Ejemplo

get hold first profesor where profesor.dni = “1111111”

profesor.calle = “Olmo”

replace

1.5 Eliminación de registros

Debemos localizar el registro para que los punteros de actualidad apunten al registro a borrar, y a continuación, usamos la orden delete.

Ejemplo:

get hold first profesor where profesor.dni= “1111111”

delete

1.6 Registros virtuales

Uno de los inconvenientes de este tipo de base de datos, es la duplicidad de datos introducida por el modelo, debido a la restricción a un solo padre por cada tipo de registro, lo cual provoca problemas cuando representamos relaciones de muchos a muchos:

image

Una solución a este problema consiste en registros virtuales, de modo que el sistema no duplica la información y actualiza los punteros dando la apariencia de tener varios registros iguales, por lo que el esquema de acceso sigue siendo válido y es totalmente transparente para el usuario.

image

1. MODELO DE RED

Una BD está constituida por un conjunto de registros que están conectados mediante enlaces. Un enlace relaciona dos registros. Por otro lado, un registro adopta la forma de registros de Pascal o Cobol (compuestos por un número de campos de diferente tipo)

Type artículo = record

Nombre: string;

Descripción: string;

Precio: integer;

End;

1.1 Diagramas de estructura de datos (DED)

Herramienta empleada para el diseño conceptual en la que se establecen diferentes registros que forman la base de datos y las relaciones entre ellos, usando dicho esquema, podemos definir una base de datos en red. Disponemos de 2 elementos:

o Cajas: Representa los diferentes tipos de registros.

o Líneas: Representa las relaciones entre los diferentes tipos de registros.

1.2 Paso de ER a DED

Para el diseño conceptual existe otra herramienta ampliamente utilizada formada por los diagramas-entidad relación (ER).

Se puede establecer una correspondencia entre diagramas ER y DED:

1.2.1 Relaciones binarias 1:1 sin atributo

El caso más simple

image

1.1.1 Relación binaria con atributo

A continuación, se relacionan profesor y materia, y teniendo en cuenta que la relación tiene un atributo llamado aula, suponemos que el aula asignada a cada materia es única.

1) Transformamos cada entidad en un registro

2) Creamos un nuevo registro para el atributo y relacionamos dicho registro con los otros dos mediante relaciones 1:N.

1.1.1 Relación ternaria

Una relación entre 3 entidades diferentes:

image

1.1 Modelo CODASYL

El grupo de trabajo sobre bases de datos (DATA BASE TASK GROUP) elabora, en el año 1971, el informe CODASYL, que es utilizado para la implementación práctica de bases de datos, aplicando ciertas restricciones a los modelos:

1) Sólo se admiten enlaces de uno a muchos, evitando los enlaces muchos a muchos. Por otro lado los enlaces uno a uno (1:1) también se transforman en enlaces 1:N.

2) En las relaciones muchos a muchos se utilizan registros ficticios, creando relaciones del tipo uno a muchos (1:N)

image

1.1.1 Conjunto DBTG

image

El sistema de BS mantiene un área de almacenamiento que es utilizada por los programas que acceden a la BD. El área de trabajo consta de:

Plantillas de registros: El sistema mantendrá una plantilla para cada tipo de registro de la base de datos de forma que el programa o usuario pueda acceder a dicha información.

Punteros de actualidad: Conjunto de punteros para poder acceder a los datos de la BD que residirá en un dispositivo de almacenamiento secundario. No encontramos:

o Punteros de tipo registro: para cada tipo de registro.

o Punteros de conjunto: para cada conjunto.

o Punteros de unidad de ejecución: apunta al registro más reciente sin importar el tipo.

Indicadores de estado

image

1.1 Acceso a datos

Se utilizan 2 órdenes para acceder a los datos:

– Find: localiza un registro y actualiza los punteros

– Get: copia registro apuntado por los punteros de unidad de ejecución en las plantillas.

Por tanto, debemos combinar ambas para acceder a los datos, de manera que en primer lugar localizaremos los datos en la base de datos (find), y a continuación los copiaremos a las plantillas (get) para acceder a dichos datos.

1.2 Acceso a registros

La orden “find” toman varias formas. Una primera posibilidad es acceder a registros individuales, para lo que utilizamos la siguiente sintaxis.

Ejemplo:

profesor.nombre= “Pepe”

find any profesor using nombre

get profesor

print (profesor.direccion)

1.2.1 Acceso por conjuntos

Puede interesarnos localizar un registro que pertenece a un conjunto. Utilizaremos la orden find con la siguiente sintaxis:

Find next <tipo-de-registro> whitin <conjunto>

profesor

materia

Supongamos que disponemos del siguiente esquema:

SSOO

En la BD tendemos la siguiente instancia:

Pepe

REDES

C

1.3 Creación de registros

Para crear un nuevo registro asignamos valores a los campos de la plantilla y, finalmente, los almacenamos con la orden “store”

Store <tipo-registro>

Ejemplo

Añadimos un nuevo profesor a la BD

profesor.nombre=”Pepe”

profesor.ciudad= “Huelva”

store profesor

1.4 Modificación de registros

Debemos localizar el conjunto usando las ordenes “find” y “get”; además la orden “find” debe incluir la cláusula “for update”

Ahora modificamos la plantilla y guardamos finalmente el resultado con la orden “modify”

modify <tipo-registro>

Ejemplo

Localizamos el profesor cuyo nombre es “Pepe” y modificamos su dirección.

profesor.nombre=”pepe”

find for update any profesor using nombre

get profesor

profesor.direccion= “avda. italia nº1”

modify profesor

1.5 Borrado de registros

Se debe localizar el registro a borrar incluyendo en la orden “find” la cláusula “for update”, y a continuación borramos con la orden “erase”.

Erase <tipo-registro>

Ejemplo

Localizamos de nuevo profesor cuyo nombre es= “Pepe” y o borramos de la BD.

Profesor.nombre=”Pepe”

Find for update any profesor using nombre

Get profesor

Erase profesor

1.6 Conexión de registros a conjuntos

Además de crear los registros hemos de conectarlo con el conjunto apropiado, para ello utilizaremos la orden “connect”:

Connect <tipo-registro> to <tipo-conjunto>

Ejemplo

Creamos una nueva asignatura y a continuación se la asignamos al profesor cuyo nombre es “Pepe”

asignatura.nombre = “SIMM”

store asignatura

profesor.nombre=”pepe”

find any profesor using nombre

connect asignatura to imparte

1.7 Desconexión de registros a conjuntos

A veces nos interesa desconectar un registro de un conjunto dado; usamos la orden “disconnect”:

Disconnect <reg1> to <conjunto>

Ejemplo

En esta ocasión haremos lo contrario del ejemplo anterior, de manera que localizaremos al profesor que imparte la asignatura cuyo nombre es “SIMM”; a continuación, localizamos al profesor que la imparte y por último desconectamos la asignatura del conjunto.

asignatura.nombre = “SIMM”

find for update any asignatura using nombre

get asignatura

find owner within imparte

disconnect asignatura to imparte

1.8 Reconectar a otro conjunto

Podemos reconectar un registro a otro conjunto. Usamos la orden “reconnect”:

reconnect <reg1> to <conjunto>

Ejemplo

La asignatura “SIMM”, que es impartida por el profesor cuyo nombre es “Pepe”, va a ser impartida por una profesora llamada “María”

asignatura.nombre=”simm”

find any asignatura using nombre

get asignatura

profesor.nombre=”maria”

find any profesor using nombre

get profesor

reconnect asignatura to imparte

2. UNA BASE DE DATOS JERÁRQUICA: IMS

Uno de los primeros sistemas gestores de BD. Primera versión 1968 por IBM.

Su nombre proviene de “information management system”

Hay 2 elementos importantes:

– DBD (Database Description): Está definida toda la estructura de la BD.

– PCB (Program Communication Block): Parte de la DBD (una vista). Subconjunto formado por eliminación de árboles y campos.

Además, cuenta con una interfaz para manipulación de datos desde lenguaje COBOL o PL/I

2.1 Manipulación de datos en IMS

GU (Get Unique): Se utiliza para recuperar un tipo de registro en función de una condición dada. GU PROFESOR WHERE DNI= “1111111”

GN (Get Next): Efectua acceso secuencial a los datos, localizando el siguiente registro, que cumpla una condición determinada.

GU PROFESOR

while DB-Status=0

Begin

GN ASIGNATURA WHERE CURSO = “4ESOA”

End

GNP (Get Next Parent):

Parecida a la anterior, pero en este caso la búsqueda se limita al padre actual.

GU PROFESOR

While DB-Status=0

Begin

GNP ASIGNATURA

End

ISRT: Permite insertar un nuevo registro en la BD.

GU PROFESOR WHERE DNI= “1111111”

ASIGNATURA.NOMBRE= “REDES”

ISRT ASIGNATURA

DLET: Borra un registro utilizando GHU (get hold unique)

GHU PROFESOR WHERE DNI= “1111111”

DLET

REPL: Modifica un registro usando GHU (get hold unique)

GHU PROFESOR WHERE DNI = “1111111”

PROFESOR.DIRECCION=”C/OLMO”

REPL

2.2 Estructura de almacenamiento

IMS emplea 2 estructuras de almacenamiento.

HS (hierarchic sequential): Almacenamiento contiguo. Los registros se mantienen en secuencia. Utiliza la cinta magnética.

o HSAM (secuencial)

o HISAM (secuencial indexado)

HD (hierarchic direct): Utiliza punteros para enlazar los registros.

o HDAM (directo)

o HIDAM (directo indexado)

3. UNA BASE DE DATOS EN RED: IDMS

Proviene de un acrónimo (Integrated Database Management System). Desarrollado a principios de los 60 por Computer Associates, se utiliza en grandes ordenadores IBM.

Se proponen 3 lenguajes para sistemas de BD:

DDL de esquemas (nivel conceptual)

DDL de subesquemas (externo)

DML (manipulación de datos) para COBOL.

3.1 Manipulación de datos

Principales proposiciones DML de IDMS:

FIND FIRST: Empleado para localizar un registro en la BD.

MOVE “1111111” TO EXPTE

FIND FIRST ALUMNO

FIND NEXT: Acceso secuencial a los datos según una condición. Podemos limitar búsqueda usando [WITHIN Nombre_conjunto].

MODIFY: Modifica el contenido de un registro.

MOVE “1111111” TO EXPTE

FIND FIRST ALUMNO

MOVE “C/ANCHA” TO DIRECCION ALUMNO

MODIFY ALUMNO

ERASE: Borra un registro de la BD.

MOVE “1111111” TO EXPTE

FIND FIRST ALUMNO

ERASE ALUMNO

3.2 Sistema de almacenamiento

Existen 2 modelos de almacenamiento denominados:

Indexado (MODE INDEX): Se emplea un índice para cada ocurrencia del conjunto.

image