Está en la página 1de 16

Alejandro Gonzlez de Aguilar Macas 1 SBD: Cap. 0.

Principios de Bases de Datos DISCO DURO Y FICHEROS


[En este documento fichero y archivo son utilizados indistintamente] Un disco se divide en platos, cada plato en pistas, y un cilindro es el conjunto de todas las pistas posicionadas unas sobre otras de entre todos los platos. Hay un conjunto de cabezas de lectura/escritura ubicadas al final de un brazo que se mueven como un grupo, de tal forma que stas pueden ser posicionadas sobre todas las pistas de un mismo cilindro. De este modo, toda la informacin de un cilindro puede ser accedida (lectura/escritura en paralelo) sin tener que mover el brazo, que es la operacin ms lenta. Normalmente, cada plato dispone de dos cabezas de lectura/escritura, una para cada cara. Podemos pensar en que una pista la podemos "fraccionar" de dos maneras: Sectores. Son divisiones fsicas y por tanto de tamao fijo. Se numeran: sectores contiguos tienen nmeros consecutivos. Un sector es la mnima unidad de informacin direccionable fsicamente en un disco. Suele ser de un tamao de 512 bytes. (El MBR Master Boot Record ocupa el sector 0, primer sector de todos). Otro concepto es el cluster. Un cluster es una cantidad fija de sectores contiguos y constituye la unidad de espacio ms pequea que se puede asignar a un fichero/archivo. El gestor de ficheros de un SO ve un fichero como un conjunto de clusters, informacin que se encuentra almacenada en la FAT (file allocation table o tabla de localizacin de archivos, en NTFS es MFT Master File table). Una vez se localiza un cluster no hay que mover las cabezas para leer todos sus sectores. El administrador del sistema es quien define cuntos sectores habr en un cluster, cuantos ms hayan, menos movimientos de las cabezas hay que realizar, con lo que se mejoran las prestaciones en el acceso secuencial. Al cluster tambin se le conoce como "unidad de asignacin". Adems, tenemos que un extent es un trozo de fichero formado por varios clusters contiguos. Mediante ellos se pretende enfatizar ms la contigidad fsica de los sectores. En NTFS (por defecto) se asignan 512 bytes por sector. Y el tamao de una unidad de asignacin o cluster es de 8 sectores: 512 bytes/sector x 8 sectores = 4096 bytes = 4 KB. Luego, lo mnimo que puede ocupar un archivo en NTFS es 4 KB, una unidad de asignacin (cluster). Un archivo de 16 KB ocupar 4 clusters. Bloques (o registro fsico). Son divisiones lgicas y, por lo tanto, su tamao es variable . Este tamao puede ser distinto para cada aplicacin, y se puede fijar como un mltiplo del tamao del registro lgico, por lo que no hay problemas de fragmentacin interna. Un bloque consiste en un nmero fijo de sectores contiguos. Un bloque es la cantidad ms pequea de datos que pueden transferirse en una operacin de E/S (operacin de transferencia) entre la memoria central y la memoria externa. Por otra parte, un archivo (fichero) de datos es una coleccin de registros relacionados lgicamente entre s con aspectos en comn y organizados para un propsito especfico. Por ejemplo, un archivo de datos bancarios. Diferenciamos a los registros lgicos, partes lgicas constituyentes de un fichero; de los registros fsicos, la forma en la que realmente esa informacin se distribuye en bloques de un disco duro (memoria externa). [De ahora en adelante usaremos siempre bloque en vez de registro fsico y registro por registro lgico, salvo que se indique lo contrario.] Un bloque puede contener uno o ms registros. Un registro puede ocupar menos de un bloque, un bloque o ms de un bloque. Distribuir los registros de un archivo en base a sectores: Surgen problemas de fragmentacin interna debido a que todos los sectores son del mismo tamao: si en un sector no cabe un mltiplo del nmero de registros, hay huecos. Cabe la posibilidad de partir los registros entre sectores, pero esto har que para acceder a ciertos registros haya que traer dos sectores en lugar de uno. Distribuir archivos enteros en base a clusters: Tambin ocasiona fragmentacin: puede que sobre espacio en un cluster, aunque no es tan malo, este espacio se puede necesitar ms tarde. Podemos calcular la capacidad de un disco duro con la frmula siguiente: Capacidad = Nmero de cilindros * Sectores por pista * Bytes por sector * Nmero de cabezales

Una base de datos se compone de varios archivos-ficheros diferentes que el sistema operativo subyacente mantiene. El objetivo es minimizar el nmero de accesos a disco y maximizar la probabilidad de que la informacin que el usuario va a necesitar en breve ya est en memoria principal.

Alejandro Gonzlez de Aguilar Macas 2 SBD: Cap. 0. Principios de Bases de Datos


Es el nmero de registros lgicos que puede contener un registro fsico o bloque. Se pueden dar 3 situaciones: Registro lgico > Registro fsico. Un mismo registro lgico ocupa ms de un bloque. Se denominan registros expandidos. Registro lgico = Registro fsico. El factor de bloque es 1 y se dice que los registros no estn bloqueados. Registro lgico < Registro fsico. El factor de bloqueo es mayor que 1 (es igual al nmero de registros lgicos que alberga el bloque) y los registros estn bloqueados.

Factor de bloqueo o blocaje

La importancia del factor de bloqueo se puede apreciar mejor con un ejemplo. Supongamos que tenemos 2 archivos. Uno de ellos tiene un factor de bloqueo de 1 (un registro en cada bloque). El otro archivo tiene un factor de bloqueo de 10 (10 registros/bloque). Si cada archivo contiene un milln de registros, el segundo archivo requerir 900.000 operaciones de E/S menos que el primero para leer todos los registros: El 1 requerir 1.000.000 de operaciones E/S para accesar a todos los registros. El 2 como los distribuye a razn de 10 por bloque, ello supone que slo requiere 100.000 bloques, con lo que para accesar todos los registros emplear 100.000 operaciones E/S. Entonces, 1.000.000 100.000 = 900.000 operaciones E/S menos. Pongamos que tenemos un tiempo medio de acceso de 90 milisegundos. Con el primer archivo tardaramos 5 6 3 alrededor de 24 horas ms para leer todos los registros del archivo: 9x10 x 90 ms = 81x10 ms = 81x10 s = 22,5 h = (aprox.) 24 h ms el 1 que el 2.

De lo anterior se deduce que un factor de bloqueo mayor que 1 siempre mejora el rendimiento; entonces, por qu no incluir todos los registros en un solo bloque? La razn reside que en ese caso habra que hacer uso de una memoria intermedia (buffer) muy grande, y por consiguiente, reduciendo drsticamente el tamao de la memoria central. Y cada vez que realizramos una operacin de transferencia, estaramos obligados a gestionar toda esa gran cantidad de tamao asignada a un solo bloque. Recordemos que un bloque es la mnima unidad de datos que se pueden transferir en una operacin de E/S. Luego no conviene aumentar el tamao del bloque alegremente, sino ms bien conseguir un equilibrio.

Alejandro Gonzlez de Aguilar Macas 3 SBD: Cap. 0. Principios de Bases de Datos COSTE DE ACCESO A DATOS EN UN DISCO

Parmetros de costes de acceso a disco

En general hay tres factores que afectan directamente a la velocidad con que los datos se transfieren entre disco y memoria principal. Cada uno de estos factores consume un tiempo y conlleva una operacin fsica. Son tiempo de bsqueda (seek), tiempo de latencia rotacional (latencia) y tiempo de lectura-escritura.

Tiempo de Bsqueda (seek)

Es el tiempo necesario para mover el brazo con las cabezas de lectura/escritura desde su posicin actual hasta el cilindro (o pista) direccionado. El brazo puede estar sobre el cilindro deseado, tener que ir al siguiente cilindro o al otro extremo del disco; por lo tanto, el tiempo de bsqueda aumenta con la distancia que deba recorrer el brazo . Los tiempos de bsqueda tpicos varan entre 2 y 30 ms. Y el tiempo de bsqueda medio es un tercio del nmero de cilindros (pistas).

Tiempo de Latencia Rotacional (latencia) Tiempo de LecturaEscritura

Es el tiempo que emplea el eje-motor de los platos en girar hasta que los cabezales de lecutra/escritura se siten sobre el sector a leer o escribir. Los tiempos de bsqueda tpicos varan entre 2 y 30 ms. El tiempo de latencia medio es el tiempo requerido para dar medio giro. Las velocidades rotacionales comunes son 5.400 r.p.m., 7.200 r.p.m..

Tiempo medio que tarda el disco en leer o escribir nueva informacin. Depende de la cantidad de informacin que se quiere leer o escribir, el tamao de bloque, el nmero de cabezales, el tiempo por vuelta y la cantidad de sectores por pista.

RENDIMIENTO DE UN DISCO
Es el tiempo transcurrido desde que se formula una solicitud de lectura o de escritura hasta que comienza la transferencia de datos. Para acceder a un sector dado, primero se debe desplazar el brazo a la pista (cilindro) necesario y luego hay que esperar a que roten los platos para que el sector requerido se posicione bajo los cabezales. Es decir, el tiempo de acceso es suma de los tiempos de bsqueda y latencia rotacional, y vara de 8 a 20 ms.

Tiempo de Acceso

Tasa (Velocidad) de Transferencia de datos

Una vez situado bajo la cabeza el primer sector de los datos, comienza la transferencia. La velocidad o tasa de transferencia de datos es la velocidad a la que se pueden recuperar datos del disco o guardarlos en l. Puede ser velocidad sostenida o de pico. La tasa de transferencia interna o sostenida se refiere a la velocidad a la que un disco duro puede leer informacin del plato y transferirla a la controladora (generalmente al buffer o memoria cach que integra). Por el contrario, la velocidad con que un disco duro es capaz de transferir datos hacia fuera, es decir, al resto de dispositivos del PC que los necesiten, se le denomina tasa de transferencia externa o de pico.

Tiempo medio entre fallos

Indica una medida de la fiabilidad del disco. Es la cantidad de tiempo que, en promedio, se puede esperar que el sistema funcione de manera continua sin tener ningn fallo.

Alejandro Gonzlez de Aguilar Macas 4 SBD: Cap. 0. Principios de Bases de Datos REGISTROS DE LONGITUD FIJA Y VARIABLE Registros de longitud fija
Como ejemplo en pseudocdigo, se propone la siguiente estructura de registro de longitud fija: type depsito = record nmero_cuenta char(10); nombre_sucursal char(22); saldo numeric(12,2); end_record Si cada carcter ocupa un byte y los valores de tipo numeric(12,2) ocupan 8 bytes. Entonces, el registro depsito tiene 40 bytes de longitud. Un enfoque sencillo sera utilizar los primeros 40 bytes para el primer registro, los 40 segundos para el segundo, y as sucesivamente. Sin embargo, hay dos problemas con este enfoque sencillo: 1. Difcil borrado de registros: hay que rellenar el espacio ocupado por el registro que se va a borrar con algn otro registro del archivo, o tener alguna manera de marcar los registros borrados para poder pasarlos por alto. A menos que el tamao de los bloques sea mltiplo de 40 (lo que resulta improbable), algn registro se saltar los lmites de los bloques. Parte del registro se guardar en un bloque y parte en otro. Harn falta, por tanto, dos accesos a bloques para accesar (leer/escribir) esos registros.

2.

Una opcin es que, cuando se borre un registro, podemos desplazar el situado a continuacin al espacio recin liberado y hacer lo mismo con los dems, hasta que todos los registros situados a continuacin del borrado se hayan desplazado hacia delante. Este enfoque necesita desplazar gran nmero de registros. Puede que fuera ms sencillo desplazar simplemente el ltimo registro del archivo al espacio recin liberado. Lo anterior no es eficiente ya que se necesitan accesos adicionales a los bloques . Otra opcin: Dado que las operaciones de insercin tienden a ser ms frecuentes que las de borrado, resulta aceptable dejar libre el espacio ocupado por los registros borrados y esperar a una insercin posterior antes de volver a utilizar ese espacio. Para esto, no es suficiente con una simple marca de borrado, ya que resulta difcil hallar el espacio disponible mientras se realiza una insercin (aunque estemos con registros de longitud fija, puede darse que exista un hueco disponible para 2 registros, y deseemos insertar 3 nuevos, en cuyo caso deber calcular de alguna manera cuntos de los 3 puede insertar en el espacio liberado). Se requiere una cabecera de archivo: al comienzo del archivo se asigna cierto nmero de bytes (como cabecera de archivo). sta contiene gran variedad de informacin sobre el archivo. Por ahora, lo nico que necesitamos conocer es la direccin del primer registro cuyo contenido se haya borrado. Luego, se utiliza este primer registro para guardar la direccin del segundo registro disponible, y as sucesivamente. Podemos implementar esto como punteros de registros disponibles, y, por tanto, estamos construyendo una lista enlazada, la cual se suele denominar como lista libre. Al insertar un registro nuevo se utiliza el registro al que apunta la cabecera y, acto seguido, se modifican los punteros para que la cabecera apunte al siguiente registro disponible. Si no hay espacio disponible, se aade el nuevo registro al final del archivo. La insercin y el borrado de archivos con registros de longitud fija son operaciones sencillas de implementar, dado que el espacio que deja libre cada registro borrado es exactamente el mismo que se necesita para insertar otro registro.

Cabecera Registro 0 Registro 1 Registro 2 Registro 3 Registro 4

C-102 C-215 C-101

Navacerrada Becerril Centro

400 700 500

Alejandro Gonzlez de Aguilar Macas 5 SBD: Cap. 0. Principios de Bases de Datos Registros de longitud variable
Surgen de varias maneras en los sistemas de base de datos: Almacenamiento de varios tipos de registros en un mismo archivo. Tipos de registro que permiten longitudes variables para uno o varios de los campos. Tipos de registro que permiten campos repetidos, como los arrays o los multiconjuntos. Existen diferentes tcnicas para implementar los registros de longitud variable, una de ellas es la estructura de pginas con ranuras. Esta tiene una cabecera al principio de cada bloque, que contiene la informacin siguiente: El nmero de entradas de registro. El final del espacio vaco del bloque. Un array cuyas entradas contienen la ubicacin y el tamao de cada registro. Los registros reales se ubican en el bloque de manera contigua, empezando por el final. El espacio libre dentro del bloque es contiguo, entre la ltima entrada del array de la cabecera y el primer registro. Si se inserta un registro, se le asigna espacio al final del espacio libre y se aade a la cabecera una entrada que contiene su tamao y su ubicacin. Si se borra un registro, se libera el espacio que ocupa y se da el valor de borrada a su entrada (por ejemplo, se le da a su tamao el valor de -1). Adems, se desplazan los registros del bloque situados antes del registro borrado, de modo que se ocupe el espacio libre creado por el borrado y todo el espacio libre vuelve a hallarse entre la ltima entrada del array de la cabecera y el primer registro. Tambin se actualiza de manera adecuada el puntero de final del espacio libre de la cabecera. Se puede aumentar o disminuir el tamao de los registros mediante tcnicas parecidas, siempre y cuando quede espacio en el bloque. El coste de trasladar los registros no es demasiado elevado, ya que el tamao del bloque es limitado: un valor habitual es 4 KB.

DISEO DE LA ESTRUCTURA DE LOS FICHEROS


Dado un conjunto de registros, la pregunta siguiente es cmo organizarlos en archivos. Esto depende de la estructura del archivo. A cada archivo se le asigna un determinado nmero de bloques. Tenemos varias maneras de estructurar (organizar) los registros en archivos: Ficheros desordenados o en montculos (heap). Ficheros ordenados o secuenciales. Ficheros asociativos o dispersos (hash). Ficheros de agrupacin o agrupamiento.

Archivos en montculos
En un fichero desordenado, tambin llamado fichero heap, los registros se colocan en el fichero en el orden en que se van insertando. Se puede colocar cualquier registro en cualquier parte del archivo en que haya espacio suficiente. Los registros no se ordenan. Generalmente hay un archivo para cada relacin (tabla relacional). Cuando llega un nuevo registro, se inserta en el ltimo bloque del fichero; si el fichero est lleno, se le aade ms espacio. Esta organizacin hace que la insercin sea muy eficiente. Sin embargo, cuando se trata de acceder a un registro del fichero, es necesario realizar una bsqueda lineal recorriendo todos los bloques del fichero uno tras

Alejandro Gonzlez de Aguilar Macas 6 SBD: Cap. 0. Principios de Bases de Datos


otro, hasta encontrar el registro deseado. Esto hace que las bsquedas de registros en los ficheros desordenados sean muy lentas. Si lo que se desea es obtener todos los registros del fichero presentndolos en un determinado orden (segn el valor de alguno de sus campos), es necesario realizar una ordenacin externa si el fichero completo no cabe en memoria principal: se van leyendo los registros, se escriben de forma ordenada en un fichero temporal en disco y, finalmente, se accede a este ltimo fichero para leer los registros una vez ordenados. Para eliminar un registro es necesario traer a memoria principal el bloque en el que se encuentra, despus se marca el registro como borrado y, por ltimo, se vuelve a escribir el bloque en el mismo lugar en el que se encontraba. El espacio que ocupaba el registro borrado no se reutiliza , lo que hace que empeoren las prestaciones, por lo que, cada cierto tiempo habr que realizar una reorganizacin del fichero para recuperar este espacio. Para modificar un registro tambin es necesario traerlo a memoria principal y actualizarlo. Si el registro modificado cabe en el bloque en el que se encontraba, se reescribe el bloque en su sitio. Si el registro modificado ha aumentado su tamao de modo que no cabe en el bloque original, hay que borrar el registro original y aadir el registro modificado al final del fichero. Los ficheros desordenados son los ms adecuados cuando se trata de cargar grandes cantidades de datos, ya que la insercin es muy eficiente al no tener que realizarse ningn clculo para determinar la posicin que debe ocupar el registro en el fichero.

Archivos Secuenciales
En un fichero ordenado, tambin llamado fichero secuencial, los registros se guardan en orden secuencial, segn el valor de una clave de bsqueda, es decir, los registros se encuentran ordenados fsicamente segn el valor de uno o varios campos. La clave de bsqueda es cualquier atributo o conjunto de atributos; no tiene por qu ser la clave primaria, ni siquiera una superclave . A este campo o campos se les denomina campos de ordenacin o clave de bsqueda. Para permitir la recuperacin rpida de los registros segn la clave de bsqueda, stos se vinculan mediante punteros. Para minimizar el nmero de accesos a distintos bloques (saltando de puntero a puntero segn la clave de bsqueda), los registros se guardan fsicamente en el orden indicado por la clave de bsqueda, o lo ms cercano posible. Cuando se trata de buscar un registro en un fichero ordenado, se puede utilizar una bsqueda binaria slo cuando se busca por el campo de ordenacin. Si la bsqueda se realiza a travs de cualquier otro campo, se debe hacer una bsqueda lineal. Si se quiere leer el fichero ordenadamente, la operacin ser muy eficiente si el orden escogido es el del campo de ordenacin. Si el orden de lectura es sobre cualquier otro campo, es preciso realizar una ordenacin externa. Para insertar un registro hay que encontrar su posicin en el fichero segn el orden establecido por el campo de ordenacin, hacer hueco y escribir. Si hay espacio suficiente en el bloque correspondiente, se reordena el bloque y se escribe en el fichero. Si no hay espacio en el bloque, habr que mover algn registro al siguiente bloque. Si este ltimo bloque no tiene espacio suficiente para tantos registros, habr que mover algunos registros al bloque siguiente, y as sucesivamente. Esto hace que la insercin de un registro pueda ser muy costosa. Una solucin consiste en tener un fichero (o incluso un bloque) desordenado de desborde , en donde se van realizando todas las inserciones. Cada cierto tiempo, el fichero (o bloque) de desborde se mezcla con el fichero ordenado, de modo que as las inserciones son muy eficientes. Esto perjudica a las bsquedas, ya que si el registro no se encuentra mediante bsqueda binaria en el fichero ordenado, hay que realizar una bsqueda lineal en el fichero de desborde. Cuando se usa un fichero (bloque) de desborde, se procesan los registros en un orden que no coincide con el fsico. Si la correspondencia entre el orden de la clave de bsqueda y el fsico se pierde totalmente, el procesamiento secuencial acaba siendo mucho menos eficiente. Llegados a este punto, se debe reorganizar el archivo de modo que vuelva a estar fsicamente en orden secuencial. Estas reorganizaciones resultan costosas y deben realizarse en momentos en los que la carga del sistema sea baja. Cuando se trata de eliminar un registro, hay que encontrarlo y marcarlo como borrado. Como en lo ficheros desordenados, cada cierto tiempo se debe realizar una reorganizacin del fichero. Para modificar un registro hay que encontrarlo y actualizarlo en caso de que quepa en el bloque en el que se encontraba. Si el registro actualizado ya no cabe en su ubicacin, hay que borrarlo, hacer hueco e insertarlo. Actualizacin: Si en la actualizacin se modifica el campo de ordenacin, entonces es muy probable que haya que cambiar el registro de lugar para mantener el orden: habr que borrarlo, hacer hueco e insertarlo de nuevo. Los ficheros ordenados no se suelen utilizar como ficheros de datos en los SGBD.

Alejandro Gonzlez de Aguilar Macas 7 SBD: Cap. 0. Principios de Bases de Datos Archivos Dispersos

En los ficheros dispersos, la direccin de cada registro se calcula aplicando cierta funcin sobre uno o varios de sus campos, denominados campos de dispersin. A la funcin se le denomina funcin de dispersin. La funcin de dispersin se debe escoger de modo que los registros queden distribuidos uniformemente en todo el fichero. La tcnica ms popular consiste en utilizar el resto de la divisin entera: se toma el valor de un campo, se divide entre un valor determinado y se utiliza el resto de la divisin entera para obtener la direccin en disco. Otra tcnica es el plegado. Consiste en tomar distintas partes del campo de dispersin y aplicarles alguna funcin matemtica. Por ejemplo, si el campo de dispersin es el DNI, se pueden tomar sus dgitos por parejas y sumarlos. Si el campo tiene caracteres, se puede tomar su valor ASCII para aplicar la operacin aritmtica. En realidad, la funcin de dispersin produce un nmero de bloque relativo. En una tabla que se encuentra en la cabecera del fichero se convierte este nmero en la direccin del bloque en el disco. El problema que presentan la mayora de las funciones de dispersin es que no garantizan direcciones nicas, de modo que varios registros se asocian a una misma direccin de bloque. Si a un bloque se asocian ms registros de los que realmente caben, se producen colisiones que hay que resolver. Los registros que se destinan a un mismo bloque se denominan sinnimos. Hay varias tcnicas para gestionar colisiones: Direccionamiento abierto. Cuando se produce una colisin, el sistema hace una bsqueda lineal a partir del bloque al que iba destinado el registro para encontrar un hueco donde insertarlo. Si se llega al final del fichero sin encontrar hueco, se contina la bsqueda desde el principio. Encadenamiento. En lugar de buscar un hueco libre, lo que se hace es disponer de una serie de bloques como rea de desborde. Cuando se produce una colisin, el registro se sita en el rea de desborde y mediante un puntero en el bloque colisionado, se apunta a la direccin del bloque de desborde y la posicin relativa del registro dentro del bloque. Adems, todos los registros que han colisionado en un mismo bloque se van encadenando mediante punteros. Dispersin mltiple. Esta tcnica de resolucin de colisiones consiste en utilizar una segunda funcin de dispersin cuando la primera ha producido una colisin. El objetivo es producir una nueva direccin de bloque situada en un rea de desborde. El acceso a los datos es muy rpido slo si se busca con la condicin de igualdad sobre el campo de dispersin. No es muy til si se busca sobre otro campo (resulta tan caro como buscar en un fichero desordenado: es preciso realizar una bsqueda lineal). Ya que la mayora de la funciones de dispersin que se utilizan no mantienen el orden entre los registro, tampoco es til cuando se quiere leer los registros ordenadamente. Para borrar un registro hay que eliminarlo del bloque en el que se encuentra. Si el fichero tiene una lista de desborde, se puede mover el registro a eliminar de la lista al bloque del rea de desborde. Si el registro a borrar ya est en la lista de desborde, slo hay que eliminarlo de ella. En este caso, ser necesario mantener una lista enlazada de posiciones de desborde no utilizadas. Si al actualizar un registro se modifica el campo de dispersin, es muy probable que el registro tenga que cambiar de posicin, por lo que habr que borrarlo e insertarlos de nuevo. Otra desventaja de la dispersin es que el espacio de almacenamiento es fijo, por lo que es difcil que el fichero se expanda o se comprima dinmicamente. Si el fichero tiene 3 bloques y en cada uno caben 2 registros, como mximo se podrn almacenar 6 registros. Si hay menos de 6 registros, quedar espacio sin utilizar. Si hay ms de 6 registros, habr muchas colisiones y esto har que el acceso sea ms lento, ya que habr largas listas de desborde. En este caso, puede ser preferible ampliar el espacio de almacenamiento y cambiar a otra funcin de dispersin, lo que implica que habr que redistribuir todos los registros (reorganizar el fichero). Ya que el espacio de almacenamiento es fijo, a este tipo de dispersin se la denomina dispersin esttica. Hay varios esquemas que tratan de remediar esta situacin: la dispersin dinmica y la dispersin extensible, que almacenan una estructura de acceso adems del fichero, y la dispersin lineal, que no necesita dicha estructura.

Alejandro Gonzlez de Aguilar Macas 8 SBD: Cap. 0. Principios de Bases de Datos Archivos con Agrupamiento y relaciones entre registros
En muchas aplicaciones existen relaciones entre los registros de varios ficheros distintos . Estas relaciones se pueden representar mediante campos conectores (claves forneas). Por ejemplo, en el registro de un empleado aparece un campo conector cuyo valor indica el cdigo de la oficina a la que pertenece. En el fichero de las oficinas, los registros tendrn un campo que ser el cdigo de la oficina. Cuando se quiere acceder a los campos de dos registros relacionados, por ejemplo, a los datos de un empleado y los datos de su oficina, se debe acceder primero al registro del empleado y utilizar el campo conector para obtener el registro con el que se relaciona en el fichero de las oficinas. De este modo, las relaciones se estn representando mediante referencias lgicas entre registros de distintos ficheros.

Hasta ahora se ha supuesto que todos los registros de un fichero son del mismo tipo. Pero podemos tener en un fichero registros de diferente tipo que guardan alguna relacin lgica en comn. Antes vimos que una forma de representar relaciones entre registros pertenecientes a diversas tablas era mediante referencias lgicas (claves forneas). Otro modo de representar las relaciones es mediante referencias fsicas: los registros relacionados se almacenan juntos en bloques de un mismo fichero. Esta organizacin es apropiada cuando se espera utilizar muy a menudo una determinada relacin en el acceso a los datos, ya que implementarla fsicamente puede aumentar la eficiencia del sistema al acceder a los registros relacionados. Por ejemplo, si se quisiera acceder con frecuencia a una oficina junto con los empleados que trabajan en la misma, sera conveniente poner el registro de cada oficina junto con los registros de todos los empleados de todos sus empleados contiguos en el disco, en un mismo fichero. Ya que los registros de todos los empleados de una misma oficina se encuentran fsicamente juntos, y a continuacin el registro con los datos de su oficina, el campo que hace referencia a la misma en los registros de los empleados ya no es necesario. Esta forma de proceder mejora enormemente las prestaciones en consultas de tipo reunin natural y operaciones similares. Por el contrario, empeora el rendimiento en consultas generalizadas de todas las tuplas de una de las tablas, ya que ahora cada tupla perteneciente a esa tabla, en vez de estar juntas en un mismo bloque de un mismo fichero, cada tupla de una tabla est mezclada con tuplas de la otra tabla y esparcidos en diferentes bloques. Esto se podra solucionar con punteros que conecten dichas tuplas esparcidas. [Vase el ejemplo] Para poder distinguir los registros de un fichero en el que se ha utilizado el agrupamiento, hay que aadir un campo a cada registro en donde se indique su tipo (suele ser el primer campo). Tambin es posible utilizar el agrupamiento en ficheros cuyos registros son todos del mismo tipo. Por ejemplo, en un fichero de empleados se puede tener los registros de los empleados agrupados por puesto de trabajo: todos los empleados con un mismo puesto estn contiguos fsicamente. Del mismo modo que antes, el campo que hace referencia al puesto se puede eliminar, pero hay que incluir un registro con el nombre del puesto delante del grupo de empleados. Cuando se utiliza el agrupamiento, se favorecen los accesos a travs de la relacin en la que se basa dicho agrupamiento, pero se penalizan los accesos a travs de cualquier otro campo. Ya que ste es un fichero EJEMPLO ordenado (aunque de un modo especial), tiene las mismas ventajas e inconvenientes que los ficheros ordenados.

Tenemos las relaciones (tablas) impositor y cliente: RELACIN impositor nombre_cliente nmero_cuenta Lpez C-102 Lpez C-220 Lpez C-503 Abril C-305 y queremos realizar la consulta:

nombre_cliente Lpez Abril

RELACIN cliente calle_cliente Mayor Preciados

ciudad_cliente Arganzuela Valsan

select nmero_cuenta, nombre_cliente, calle_cliente, ciudad_cliente from impositor, cliente where impositor.nombre_cliente = cliente.nombre_cliente Esta consulta calcula una reunin natural de las relaciones impositor y cliente. Por tanto, por cada tupla impositor el sistema debe encontrar las tuplas cliente con el mismo valor de

Alejandro Gonzlez de Aguilar Macas 9 SBD: Cap. 0. Principios de Bases de Datos nombre_cliente. Esto supone que, en el peor de los casos, cada registro se hallar en un bloque diferente, lo cual implica que hay que transferir a memoria principal a bloque por cada registro requerido. Un archivo que agrupa varias tablas es una organizacin de archivo, como la mostrada a continuacin, que almacena fsicamente registros relacionados de dos o ms tablas en cada bloque. Esto permite leer registros que satisfacen la condicin de reunin en un solo proceso de lectura de bloques. Por tanto, esta consulta se puede procesar de manera ms eficiente. AGRUPACIN DE VARIAS TABLAS EN UN MISMO ARCHIVO Lpez Mayor Arganzuela Lpez C-102 Lpez C-220 Lpez C-503 Abril Preciados Valsan Abril C-305

Por otra parte, retarda el procesamiento de otros tipos de consulta, como por ejemplo: select * from cliente Ahora se necesitan ms accesos a bloques que con el esquema en el que cada relacin se guardaba en un archivo diferente. En lugar de aparecer varios registros de cliente en un mismo bloque, cada registro se halla en un bloque diferente. Sin embargo, podemos solucionarlo aadiendo una estructura adicional: se pueden enlazar todos los registros de esa relacin mediante punteros. AGRUPACIN DE VARIAS TABLAS EN UN MISMO ARCHIVO Lpez Mayor Arganzuela Lpez C-102 Lpez C-220 Lpez C-503 Abril Preciados Valsan Abril C-305

Alejandro Gonzlez de Aguilar Macas 10 SBD: Cap. 0. Principios de Bases de Datos NDICES
En consultas como Buscar el saldo del nmero de cuenta C-101 no es eficiente que el sistema tenga que leer cada registro y comprobar que el campo nmero_cuenta contenga el valor C-101 para cada uno de los registros. Sera ms eficaz que el sistema fuera capaz de localizar directamente esos registros. Para facilitar estas formas de accesos se disean estructuras adicionales que se asocian con los archivos (con cualquier tipo de archivo de los cuatro vistos anteriormente), nos referimos a los ndices. Los ndices de los sistemas de base de datos juegan el mismo papel que los ndices de los libros. A menudo se desea tener ms de un ndice por archivo. Cada estructura de ndice est asociada con una clave de bsqueda concreta. Esto supone que un mismo archivo puede tener varios ndices segn diferentes claves de bsqueda. Por ejemplo se puede buscar un libro segn el autor, la materia o el ttulo. En un ndice, si se conoce el valor de la clave de bsqueda, el acceso es directo. Si an no es evidente, se dejar an ms claro: un ndice es un archivo (fichero) ms, y, por tanto, tambin est constituido fsicamente por bloques que albergan registros. Normalmente, un ndice estar formado por registros de dos campos: el campo sobre el que se define el ndice y el campo cuyo dominio est formado por valores de direcciones de bloques en disco ms un desplazamiento en el bloque de disco para identificar el registro dentro del bloque . El primer campo se corresponde con la clave de bsqueda a la que est asociado, esto es, que la clave de bsqueda ser un atributo o conjunto de atributos de la tabla-relacin mantenida en el archivo para el cul queremos construir el nuevo ndice. Y, por tanto, el dominio de la clave de bsqueda y el dominio del campo definidor del ndice, son el mismo. A este campo lo llamamos campo de indexacin. Con esta estructura adicional, a la hora de querer resolver la consulta inicial, podemos pensar que en nuestro ndice se relaciona directamente en uno de sus registros el nmero de cuenta C-101 con la direccin de bloque 3496+3, por lo que ya no hay que buscar registro por registro en el archivo original buscando la cuenta C-101, sino que directamente transferimos a memoria principal el bloque 3496 que sabemos, segn nuestro ndice, contiene el registro referido a la cuenta C-101, en la posicin 3 del bloque 3496. Hay dos tipos bsicos de ndices: ndices ordenados: son ndices cuyos valores del campo de indexacin estn ordenados. ndices asociativos: estos ndices estn basados en una distribucin uniforme de los valores a travs de una serie de cajones (buckets). El valor asignado a cada cajn est determinado por una funcin, llamada funcin de asociacin (hash function).

Criterios para comparar tcnicas de indexacin

Tipos de acceso. Los tipos de acceso que se soportan eficazmente. Estos tipos podran incluir la bsqueda de registros con un valor concreto en un atributo, o la bsqueda de los registros cuyos atributos contengan valores en un rango especificado. Tiempo de acceso. El tiempo que se tarda en hallar un determinado elemento de datos, o conjunto de elementos, usando la tcnica en cuestin. Tiempo de insercin. El tiempo empleado en insertar un nuevo elemento de datos. Este valor incluye el tiempo utilizado en hallar el lugar apropiado donde insertar el nuevo elemento de datos, as como el tiempo empleado en actualizar la estructura del ndice. Tiempo de borrado. El tiempo empleado en borrar un elemento de datos. Este valor incluye el tiempo utilizado en hallar el elemento a borrar, as como el tiempo empleado en actualizar la estructura del ndice. Espacio adicional requerido. El espacio adicional ocupado por la estructura del ndice. Como normalmente la cantidad necesaria de espacio adicional suele ser moderada, es razonable sacrificar el espacio para alcanzar un rendimiento mejor.

Alejandro Gonzlez de Aguilar Macas 11 SBD: Cap. 0. Principios de Bases de Datos ndices Ordenados
Los valores del campo de indexacin estn ordenados; luego sus registros siguen un orden secuencial segn la clave de bsqueda. Dijimos que podemos construir varios ndices a partir de un mismo archivo. Tenemos diferentes tipos de ndices ordenados en base a la clave de bsqueda para la que est asociado cada ndice: Si la clave de bsqueda (campo de indexacin) est basada en la misma clave de ordenacin en la que est ordenado el archivo de datos al que hace referencia el ndice (ie, archivo de datos e ndice estn ordenados de igual manera, bajo la misma clave), se le clasifica como ndice con agrupacin (clustering index) o ndice primario o agrupado. El trmino primario se usa algunas veces para hacer alusin a un ndice basado en una clave primaria, pero en realidad se puede usar sobre cualquier clave de bsqueda: candidata, o no candidata, primaria, o no primaria. La clave de bsqueda de un ndice con agrupacin es normalmente la clave primaria sobre la que est ordenado el archivo de datos para el que se crea el ndice, aunque no es as necesariamente. A un ndice que no est ordenado en el mismo orden que sigue el archivo de datos al que referencia (ie, la clave de bsqueda de ndice y archivo de datos difiere), se le clasifica como ndice sin agrupacin (non clustering index) o ndice secundario o no agrupado .

Los archivos secuenciales que tienen un ndice con agrupacin se llaman archivos secuenciales indexados, y representan uno de los esquemas de ndices ms antiguos usados por los sistemas de bases de datos. Se usan en aquellas aplicaciones que demandan un procesamiento secuencial del archivo completo, as como un acceso directo a sus registros. Hay 2 subtipos de ndices ordenados: densos y dispersos.

Se crean registros de ndice para cada valor distinto de la clave de bsqueda del ndice. En el caso de un ndice con agrupacin, al estar basado en la misma clave de bsqueda que utiliza el archivo de datos secuencial al que hace referencia, si hay ms de un registro en el archivo de datos con el mismo valor de clave de bsqueda, estos aparecern en el archivo uno a continuacin del otro despus del primero de ellos, y no ser necesario mantener registros de ndice para todos los registros del archivo secuencial con el mismo valor de clave de bsqueda, sino slo mantener un registro de ndice para el primero de ellos (efecto de agrupacin). En el caso de un ndice sin agrupacin, al diferir las claves de bsqueda de ambos, ser necesario mantener un registro ndice para todos los registros del archivo de datos con el mismo valor de clave de bsqueda del ndice, ya que stos pueden estar en diferentes ubicaciones no contiguas del archivo de datos. Se crean registros de ndice para algunos valores de la clave de bsqueda del ndice. Esto obliga a que sea agrupado. Un ndice agrupado puede ser disperso. Un ndice no agrupado no puede ser disperso. Para localizar un registro, se busca la entrada del ndice con el valor ms grande que sea menor o igual que el valor que se est buscando. Se empieza por el registro apuntado por esa entrada del ndice y se contina con los punteros del archivo hasta encontrar el registro deseado. Generalmente es ms rpido localizar un registro si se usa un ndice denso en vez de uno disperso. Sin embargo, los ndices dispersos tienen algunas ventajas sobre los densos, como el utilizar un espacio ms reducido y un mantenimiento adicional menor para las inserciones y borrados. Una buena metodologa es tener un ndice disperso con una entrada del ndice por cada bloque en el archivo de datos. El motivo de esto es que el mayor coste de procesar una peticin en la base de datos es el empleado en traer un bloque de disco a la memoria. Una vez el bloque en la memoria, el tiempo en examinarlo es prcticamente inapreciable. De esta manera se minimizan los accesos a bloques mientras el tamao del ndice se mantiene tan pequeo como sea posible. Para poder generalizar la tcnica del ndice disperso con una entrada por bloque en el archivo de datos , hay que tener en cuenta si los registros de una clave de bsqueda ocupan varios bloques. Quiere decir que, dado un archivo de datos secuencial, si sus registros estn organizados de tal manera que cada valor de la clave de bsqueda caiga en un bloque distinto, o la situacin contraria: varios valores de la clave de bsqueda pueden caer en un mismo bloque de datos. La segunda situacin es la idnea para lo que estamos diciendo. Es fcil modificar el esquema para acomodarse a esta situacin.

ndices Densos

ndices Dispersos

Alejandro Gonzlez de Aguilar Macas 12 SBD: Cap. 0. Principios de Bases de Datos

ndices Multinivel
Veremos esto con un ejemplo. En la prctica no es excesivo tener un archivo con 100.000 registros, con 10 registros almacenados en cada bloque. Si se dispone de un ndice disperso con un registro ndice por bloque, el ndice tendr 10.000 registros. Como los registros ndices son ms pequeos que los registros de datos, se puede suponer que caben 100 registros ndices en un bloque. Lo que supone que finalmente, nuestro ndice disperso ocupara 100 bloques. Lamentablemente es demasiado grande como para albergarlo en memoria principal y es almacenado en disco como un archivo secuencial ms. Si fuera posible contenerlo en memoria principal, el tiempo de bsqueda para encontrar una entrada sera breve, pero al estar almacenado el ndice tambin en disco, buscar una entrada implicar leer varios bloques de disco. Para localizar una entrada en el archivo ndice se puede realizar una bsqueda binaria. Si el ndice ocupa b bloques, mediante bsqueda binaria, el coste mximo de bloques necesarios para dar con la entrada buscada es de , lo que en nuestro ejemplo supondra un coste mximo de 7 bloques (b=100). En un disco en el que la lectura de un bloque tarda 30 ms, la bsqueda emplear 7x30 = 210 ms, que es bastante. Por otro lado, obsrvese que si se estn usando bloques de desbordamiento, la bsqueda binaria no ser posible. En ese caso, lo normal es una bsqueda secuencial, y eso requiere leer b bloques, lo que podra consumir incluso ms tiempo. As que, es claro que buscar una entrada en un ndice muy grande puede resultar muy costoso. Para resolver el problema podemos recurrir a usar un nivel ms de indexacin incorporando un segundo ndice disperso sobre el ndice disperso primero almacenado en disco. Es decir, tenemos ahora 3 archivos: el archivo secuencial de datos original, el archivo de ndice disperso de nivel 1, ambos almacenados en disco; y un archivo ms que sera el nuevo ndice externo basado en el ndice interno. ste, al ser tambin disperso, por cada bloque del ndice interno contendr un registro ndice, aunque resultar en un archivo de tamao mucho menor: si antes decamos que caban a 100 registros ndices por bloque, y que el ndice interno ocupaba 100 bloques, entonces el nuevo ndice disperso externo ocupar tan solo 1 bloque. Lo que significa que ahora s podemos albergarlo en memoria principal.

Alejandro Gonzlez de Aguilar Macas 13 SBD: Cap. 0. Principios de Bases de Datos


Con la nueva situacin, para localizar un registro se usa en primer lugar una bsqueda binaria sobre el ndice ms externo (en mem. principal) para buscar el registro con el mayor valor de la clave de bsqueda que sea menor o igual al valor deseado. El puntero apunta a un bloque en el ndice ms interno (en disco, lo que implica que hay que traerlo a mem. principal gastando una operacin de E/S). Hay que examinar este bloque (ya en mem. principal) hasta encontrar el registro con el mayor valor de la clave que sea menor o igual que el valor deseado. El puntero de este registro apunta al bloque del archivo que contiene el registro buscado; que se trae tambin a mem. principal para tratar con l, gastando otra operacin de E/S, lo que al final redunda en que hemos empleado 2 operaciones E/S frente a 7 que hubiramos hecho antes. Si el archivo que contiene los registros de datos, el archivo inicial, fuera an ms grande, podra ser que el ndice de segundo nivel ocupara tambin un tamao considerable. Lo que obligara tambin a almacenarlo en disco. En cuyo caso podramos volver a tratar este ndice de segundo nivel (al igual que hicimos con el primero) como un archivo secuencial y sacar otro ndice (de tercer nivel) a partir del segundo. Resultando 3 niveles de indexacin. En general, este proceso se puede llevar hasta el nivel n de indexacin que se precise. A esta organizacin con dos o ms niveles de ndices se llama ndices multinivel. Los ndices multinivel estn estrechamente relacionados con la estructura de rbol, tales como los rboles binarios usados para la indexacin en memoria.

Actualizacin de ndices de un solo nivel

[Nota: tanto en la insercin y en el borrado, se lleva a cabo la correspondiente insercin/borrado del registro de datos que se est tratando en ese momento en el archivo de registros de datos inicial. Haremos notar esto con el smbolo # en el lugar oportuno.] Primero se realiza una bsqueda en el ndice usando el valor de la clave de bsqueda del registro a insertar. Siendo el ndice denso: (recordemos: un registro ndice por valor de clave-bsqueda distinto) 1. Si el valor de la clave de bsqueda no aparece en el ndice, el sistema inserta en ste un registro ndice con el valor de la clave de bsqueda en la posicin adecuada. (#) 2. En caso contrario, esto es, si hay una coincidencia en el ndice, se emprenden las siguientes acciones: a. Si el registro ndice almacena punteros a todas las entradas con el mismo valor de la clave de bsqueda, esto es, se trata de un ndice denso no agrupado, el sistema aade un puntero en el existente registro-ndice (o un registro nuevo si no se mantienen listas de punteros) apuntando al nuevo registro de datos. b. En caso contrario, esto es, se trata de un ndice denso agrupado, entonces, tenemos que el registro ndice que coincide con el valor buscado de la clave de bsqueda contiene un puntero que apunta al primero de un grupo de registros de datos, todos ellos con el mismo valor de clave de bsqueda. Como consecuencia, no se crea un nuevo registro ndice, y (#) se procede a la insercin del nuevo registro de datos, en el archivo de datos, a continuacin de los otros registros con los mismos valores de la clave de bsqueda.

Inser cin

Alejandro Gonzlez de Aguilar Macas 14 SBD: Cap. 0. Principios de Bases de Datos


Siendo el ndice disperso: asumiendo que el ndice almacena un registro ndice por cada bloque en el archivo de registros de datos: 1. si se crea un nuevo bloque en el archivo de registros de datos, entonces el sistema crear un nuevo registro ndice apuntando al primero de los registros de datos que aparezcan en el nuevo bloque (se entiende aqu, que esos registros de datos del nuevo bloque han sido ordenados como resultado de la insercin en el archivo secuencial). 2. Por el contrario, si no se crea bloque nuevo en el archivo de registros de datos, entonces el registro de datos se almacenar en algn bloque ya existente con hueco suficiente y, respetando el orden secuencial de la clave de bsqueda. Esto implica que puede que haya una reordenacin de los registros de datos en el bloque mencionado. a. De ser as, y si el nuevo registro de datos insertado es el que queda primero de grupo en el bloque por tener el menor valor de la clave de bsqueda, entonces en este caso, habr que actualizar el registro ndice correspondiente a ese bloque en el archivo ndice para que apunte ahora al nuevo primero de los registros de datos del bloque, con el nuevo valor de clave de bsqueda ms bajo que el anterior. b. De no quedar primero de grupo, entonces no habr que llevar a cabo ninguna accin en el archivo de ndice, y ste seguir teniendo al registro ndice correspondiente al bloque en el que se ha insertado el nuevo registro de datos apuntando al registro de datos de ese bloque (el primero de los que contenga), manteniendo por tanto el mismo valor de clave de bsqueda.

Inser cin

[Nota: tanto en la insercin y en el borrado, se lleva a cabo la correspondiente insercin/borrado del registro de datos que se est tratando en ese momento en el archivo de registros de datos inicial.] Primero se realiza una bsqueda en el ndice usando el valor de la clave de bsqueda del registro a borrar. Siendo el ndice denso: (recordemos: un registro ndice por valor de clave-bsqueda distinto) 1. Si se encuentra con que hay un nico registro de datos en el archivo de datos con ese valor de la clave de bsqueda, directamente se borra el registro ndice correspondiente. 2. En caso contrario, esto es, hay ms de una coincidencia en el archivo original, se emprenden las siguientes acciones: a. Si el archivo ndice almacena punteros a todas las entradas con el mismo valor de la clave de bsqueda, esto es, se trata de un ndice denso no agrupado, entonces el sistema borra del archivo ndice el registro ndice correspondiente que apunta al registro de datos borrado. b. En caso contrario, esto es, se trata de un ndice denso agrupado; como el archivo ndice slo guarda un registro ndice por cada grupo con mismos valores de la clave de bsqueda del archivo original, el sistema har lo siguiente: i. si el registro de datos borrado era el primero de grupo, hay que actualizar el registro ndice correspondiente para que apunte al siguiente registro de datos en el grupo del archivo original. ii. si no era el primero de grupo, no hay que hacer nada en el archivo ndice. Siendo el ndice disperso: asumiendo que el ndice almacena un registro ndice por cada bloque en el archivo de registros de datos: 1. Si en el archivo ndice no hay un registro ndice para la clave de bsqueda del registro de datos borrado, no hay que hacer nada. 2. En caso contrario, esto es, hay un registro ndice que apunta al registro de datos a borrar, se emprenden las siguientes acciones: a. Si el registro de datos borrado era el nico con ese valor de clave de bsqueda, entonces hay que actualizar el registro ndice asociado: i. se actualiza el registro ndice para que apunte al registro de datos con el valor de clave de bsqueda que segua al borrado, dentro del mismo bloque. ii. si ya haba un registro ndice para dicho valor siguiente de clave de bsqueda (esto es, ya es otro bloque de datos), entonces ste ltimo no se toca y el primer registro ndice se borra sin actualizarlo. b. Si hay ms de un registro de datos con ese valor de clave de bsqueda, y si el registro ndice que hay para ese valor de clave de bsqueda apunta al registro de datos que se quiere borrar, entonces el sistema actualiza el registro ndice para que apunte al siguiente registro de datos con el mismo valor de clave de bsqueda.

Borr ado

Alejandro Gonzlez de Aguilar Macas 15 SBD: Cap. 0. Principios de Bases de Datos Insercin y Borrado para ndices multinivel
Los algoritmos de insercin y borrado para los ndices multinivel se extienden de manera sencilla a partir del esquema descrito anteriormente. Primero se actualiza el ndice de nivel ms bajo. Luego se actualiza el ndice de nivel dos si hubo cambios en el de nivel 1. Y as sucesivamente.

ndices Secundarios

Los ndices secundarios deben ser densos, y no agrupados (por eso ndice secundario equivale a ndice no agrupado). La razn de ser densos es que nunca podrn ser dispersos. Veamos, tenemos un archivo de datos que es el que contiene los registros de datos reales. Es decir, el que tiene la informacin de cada registro completa, por ejemplo la informacin de cada empleado completa. Este archivo de datos es secuencial y est ordenado segn una clave de bsqueda. Llamemos al archivo de datos secuencial 1, y a su clave de bsqueda, clave A. Pongamos que la clave A es la ciudad de cada empleado. Tenemos ahora un ndice secundario, 2, que es otro archivo secuencial o rdenado segn una clave de bsqueda, clave B, que en realidad es su campo de indexacin. Recordemos aqu que un ndice secundario usa una clave de bsqueda que no es la misma que usa el archivo original del que construimos el ndice. Pongamos que la clave B es el salario de cada empleado. Si 2 fuera disperso, ste contendra registros ndice que apuntara slo a algunos valores de la clave B, es decir, habra algunos valores de la clave B para los que no tendramos registro ndice asociado que apun tara a ellos en 2; llamemos a estos valores como valores intermedios de la clave B. Entonces, si quisiramos acceder a uno de los registros de datos en 1 cuyo valor del campo clave B fuera uno de los intermedios, entonces no podramos encontrarlos. El motivo es que 1 est ordenado segn A, la ciudad de cada empleado, y que 2 est ordenado segn B, el salario; y entonces si slo tenemos acceso directo a slo algunos de los valores salario por medio de nuestro ndice secundario, 2, para los dems valores intermedios de salario que no tienen registro ndice asociado, y por tanto, no tenemos acceso directo, sera difcil encontrarlos, porque en principio 1 est ordenado segn otro campo, la ciudad. Esos registros con valores de salario para los que no tenemos puntero (registro ndice) asociado en 2 podran estar en cualquier parte de 1. De lo anterior se concluye que un ndice secundario es obligado que sea denso. Ahora veremos por qu no ha de ser agrupado, o al revs, por qu ha de ser no agrupado. Tenemos ya que 2 es denso. Eso implica que habr un registro ndice (puntero) por cada valor de B distinto en 1. Peroy qu pasa si en 1 hay ms de un registro de dato con un mismo valor de B? Si 2 en vez de basarse en B, se basara en la misma clave que 1, esto es en A, ambos estaran ordenados secuencialmente segn el mismo criterio, y esto supone que los registros con mismo valor de A iran uno a continuacin del otro, por llamarlo de alguna manera podramos decir que forman un grupo. Con tener un puntero en 2 que apunte al primero de los registros del grupo que tienen todos el mismo valor de A, es suficiente para acceder a todos los dems registros del grupo con un simple desplazamiento o una pequea bsqueda lineal a partir del primero de grupo, que s que tenemos acceso directo a l. Esto, en esencia, es lo que intrnsecamente significa el trmino ndice agrupado o con agrupacin: para valores repetidos de la clave de bsqueda agrupamos a todos esos registros para que puedan ser accedidos casi directamente a partir de un solo puntero o registro ndice; que tambin podramos expresar esto como que 1 registro ndice se corresponde con N registros de datos con mismo valor de A. O sea, estamos agrupando N en 1. Pero, eso es cambiar la naturaleza de 2 porque 2 est basado en la clave B que es distinta de A. Y por esa razn, si agrupramos para mismos valores de B, nos sera difcil encontrar aquellos registros en 1 que tienen valores repetidos de B, a excepcin del que tenemos accesado directamente por mediacin del nico puntero que tenemos constancia en 2. Puesto que ambos siguen un orden secuencial distinto. Por eso 2 nunca podr ser agrupado. Es obligado, por tanto, que 2, que un ndice secundario mantenga: un registro ndice (puntero) por cada valor de su clave de bsqueda distinto en el archivo origen. Esto cumple la condicin de ser denso. un registro ndice para todos los valores repetidos de su clave de bsqueda en el archivo origen. Esto cumple la condicin de ser no agrupado.

Alejandro Gonzlez de Aguilar Macas 16 SBD: Cap. 0. Principios de Bases de Datos


Por tanto, un ndice secundario ha de tener punteros a todos los registros. Se puede usar un nivel adicional de referencia para implementar los ndices secundarios basados en claves no candidatas (quiere decir para ndices secundarios cuya clave de bsqueda pueda tener valores duplicados). Los punteros, en este caso, no apuntan directamente al archivo. En vez de eso, cada puntero apunta a un cajn o bucket que contiene punteros al archivo. Indice secundario que usa buckets basndose en el campo Saldo

Ordenados segn el campo Ciudad

El procedimiento ya descrito para borrar e insertar se puede aplicar tambin a los ndices secundarios; las acciones a emprender son las descritas para los ndices densos que almacenan un puntero a cada registro del archivo (es decir las descritas para los ndices no agrupados). Los ndices secundarios mejoran el rendimiento de las consultas que usan claves que no son la de bsqueda del ndice con agrupacin (o primario). Sin embargo, implican un tiempo adicional importante al modificar la base de datos. El diseador de la base de datos debe decidir qu ndices secundarios son deseables, segn una estimacin sobre las frecuencias de las consultas y de las modificaciones.