Se denomina sistema de gestión de la base de datos (SGDB o DBMS, del
inglés “Data Base Management System”) al conjunto de software destinado a la
creación, control y manipulación de la información de una base de datos.
Concretamente, Un DBMS debe permitir la realización de las siguientes tareas:
• Acceso a los datos desde algún lenguaje de alto nivel.
• Interrogación (o recuperación de la información) directa en modo
conversacional.
• Definición del esquema de la base y de los distintos subesquemas.
• Organización física de la base de datos y recuperación tras fallos del sistema.
Un Sistema de Gestión de Base de Datos, al igual que el sistema operativo,
proporciona servicios tanto a los usuarios como a otros programas. A menudo,
cuando el usuario piensa que está utilizando directamente el Sistema de Gestión, lo que realmente hace es usar un programa que le proporciona una interfaz de usuario para trabajar con él.
Procesamiento
Las operaciones con archivos de acceso directo son las usuales, ya vistas
anteriormente, aunque teniendo en cuenta que para cualquier acceso a un registro inicialmente hay que buscar en la tabla de índices una clave igual a la
correspondiente al elemento que se desea (para obtener la dirección de la clave y poder acceder el registro correspondiente) y que desde el punto de vista del programador, solo existen los registros alcanzables a través de los índices que existen en cada momento.
En un soporte direccionable -normalmente un disco-, cada posición se localiza por su dirección absoluta-número de pistas y número de sector en el disco-. Los archivos de acceso directo manipulan direcciones relativas en lugar de absolutas, lo que hace al programa independiente de la posición absoluta del archivo en el soporte. La función de conversión transformará las claves en direcciones relativas.
Suponiendo que existen N posiciones disponibles para el archivo, la conversión de clave producirá una dirección relativa en el rango 1 a N. En el caso en que dos registros distintos produzcan la misma dirección, se dice que se produce una colisión que por otro lado son inevitables y que se controlan mediante dos métodos básicos (sobre los que no insistiremos más):
Buscar una nueva dirección libre en el mismo espacio del archivo.
Asignar el registro a la primera posición libre de la zona de excedentes.
Procesos de escritura de registros
El proceso de introducción de datos en un archivo directo o aleatorio, que
en un abuso de lenguaje llamaremos creación, consiste en ir introduciendo los
sucesivos registros en el soporte que los va a contener y en la detección obtenida resultante del algoritmo de conversión. Si al introducir un registro se encuentra ocupada la dirección, el nuevo registro deberá ir a la zona de sinónimos o de excedentes, sobre cuyos detalles ya hemos dicho que no entraríamos.
Bastará con saber que estos archivos necesitan dos zonas de almacenamiento, la principal constituida por registros de longitud constante y la de sinónimos donde secuencialmente se almacenan aquellos registros cuyas claves coinciden o son direcciones sinónimas de registros grabados en la zona principal.
Veamos un algoritmo que desarrolla este proceso de escritura:
algoritmo escri-reg
inicio
abrir archivo
leer registro
mientras < > FF hacer
calcular dirección mediante algoritmos de conversión
escribir ”dirección libre S/N”
leer respuesta
si respuesta = “S”
entonces
grabar registros
sino
buscar espacio en área de sinónimos
grabar registro
fin_si
leer registro
fin_mientras
fin
Consulta
A partir de la entrada del número o números de registros a consultar. Las
operaciones a realizar son:
• definir clave del registro buscado.
• aplicar algoritmo de conversión clave a dirección.
• lectura del registro ubicado en la dirección obtenida.
• comparación de las claves de los registros leído y buscado.
• exploración secuencial del área de excedentes, si no se encuentra el registro en este área es que no existe.
Veamos un esquema que facilita el proceso de consulta:
mientras < > EOF hacer
leer registro R
ir a subprograma de obtención de la dirección
leer registro S
si R=S
entonces
llamar_a subprograma consulta
sino
leer área de sinónimos
si FF en área de sinónimos ¨{no hay ningún sinónimo}
entonces
escribir “registro no existe”
sino llamar_a subprograma consulta
fin_si
fin_si
fin_mientras
Altas
Para dar de alta a un registro, se debe introducir su número de orden y contenido.
La inserción de un registro en el archivo, supone utilizar un campo adicional,
alta/baja del registro, SW (interruptor) que tome el valor 1 ó 0, según que el
registro esté dado de alta o de baja, ya que como veremos a continuación, la baja es solo de carácter lógico y es posible que demos de alta un registro que ya existe, pero que fue dado de baja anteriormente.
El algoritmo para llevar a cabo el procedimiento de dar de alta es:
algoritmo altas
inicio
SW = 0
repetir
leer” número de registro a dar de alta”. NR
si 1
//Ya está o índice lleno
si_no
//Alta en área de datos
//Buscar hueco libre mediante una función HASH
NRR hash(R.código)
leer(A, RAux, NRR)
mientras RAux.estado = 1 hacer
NRR NRR mod MaxReg + 1
leer(A, RAux, NRR)
fin_mientras
//Graba el registro en el área de datos,
//marcándolo como ocupado (R.estado = 1)
R.estado 1
escribir(A, NRR,R,)
//Alta en el índice
Ind[0].clave R.código
Ind[0].NRR NRR
i n
mientras Ind[i].clave > Ind[0].clave hacer
Ind[i+1] Ind[i]
i i – 1
fin_mientras
Ind[i+1] Ind[0]
n n + 1
fin_si
fin_procedimiento
//El procedimiento Baja da una baja lógica en el área de datos
//y elimina la entrada en el área de índices
//El argumento R contiene el código del producto a dar de baja
procedimiento Baja(ref AProductos:A; valor RProducto:R; ref vIndice:Ind;
ref entero:n)
var
entero : p,i
inicio
p buscar(Ind,R,n)
si p = 0 entonces
//No está
si_no
//Dar una baja lógica en el área de datos
leer(A,Ind[p].NRR,R)
R.estado 2
escribir(A,Ind[p].NRR,R)
//Eliminar del índice
desde i p hasta n-1 hacer
Ind[i] Ind[i+1]
fin_desde
n n - 1
fin_si
fin_procedimiento
//El procedimiento Modificar, modifica un registro en el área de datos.
//El índice no cambia, ya que el código del producto no se puede modificar
//El argumento R contiene el código del producto a modificar y los campos modificados
procedimiento Modificar(ref AProductos:A; valor RProducto:R; valor vIndice:Ind;
valor entero:n)
var
entero : p
inicio
p buscar(Ind,R,n)
si p = 0 entonces
//No está
si_no
escribir(A,Ind[p].NRR,R)
fin_si
fin_procedimiento
Acceso a los registros
El acceso directo (por ejemplo para una consulta) se realiza mediante una búsqueda binaria en el área de índices y accediendo de forma directa al registro a partir de su NRR.
procedimiento Consulta(ref AProductos:A; valor RProducto:R; valor vIndice:Ind;
valor entero:n)
var
entero : p
inicio
p buscar(Ind,R,n)
si p = 0 entonces
//No está
si_no
leer(A,Ind[p].NRR,R)
//Procesar el registro (por ejemplo, presentarlo por pantalla)
escribir(R.código,R.desc,R.stock)
fin_si
fin_procedimiento
El acceso secuencial se realiza accediendo secuencialmente a la tabla de índices y leyendo de forma directa el registro en el área de datos a partir de su NRR.
procedimiento Listado(ref AProductos:A; valor RProducto:R; valor vIndice:Ind;
valor entero:n)
var
entero : i
inicio
desde i 1 hasta n hacer
leer(A,Ind[i].NRR,R)
//Procesar el registro (por ejemplo, presentarlo por pantalla)
escribir(R.código,R.desc,R.stock)
fin_desde
fin_procedimiento
No hay comentarios:
Publicar un comentario