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.
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.
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.
Quedaría de la siguiente forma en el diagrama DEA:
El diagrama DEA quedaría de la siguiente forma:
En este caso creamos un nuevo registro ficticio llamado <imparte> y añadimos enlaces del siguiente modo:
1.1.1 Relaciones binarias N:M
1.1.1 Relación ternaria
Supongamos, una relación entre 3 entidades diferentes como la descrita:
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:
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:
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.
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
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:
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)
1.1.1 Conjunto DBTG
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
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.