Professional Documents
Culture Documents
en la entrada del indice de K(i), con un puntero a cada bloque que contenga un registro cuyo
valor del campo de indexacién sea igual a K(i). Tanto en la opcién 1 como en la 2, sera
necesario modificar apropiadamente el algoritmo de busqueda binaria sobre el indice.
La Opcién 3, que se utiliza més a menudo, consiste en usar entradas de indice de longitud
fija y tener una sola entrada por cada valor del campo de indexacién, pero creando un nivel
de indireccién adicional para manejar los punteros multiples. En este esquema no denso, el
puntero P(i) de una entrada de indice
donde q al siguonto
° & : aire fod hole
do) abo
y Y Y v
Puntoro _Puntoro Puntero Puntero
dedates dedaios de datos de datos
Figura 6.11. Nodos de un arbol B*. (a) Nodo interno de un arbol B* con q ~ 1 valores de busqueda.
(b) Nodo hoja de un érbol B* con q~ 1 valores de busqueda y q ~ 1 punters a datos.
La estructura de los nodos hoja de un drbol B* de orden p (Figura 6.11b) es la siguiente:
1. Todo nodo hoja tiene la forma
< n.K, ,
entoncés n —1.P,
sino principio
buscar en el nodo n una entrada i tal que n.K,
nen.P,
fin;
leer bloque n
fin;
buscar en el bloque n la entrada (K,, Pr.) conK=K,; (* buscar nodo hoja *)
sise encuentra
entonces leer el bloque del fichero de datos con direccién Pr;, y recuperar el
registro sino el registro con valor de campo de busqueda K no est4 en el fichero
de datos;
*)
nuevo « entradas a partir del puntero de Arbol P,",, de temp;
(*n contiene *)
‘eaguiente * NUEVO}
yi Kaas ee
‘pa? p44
KeK,
(* ahora debemos pasar (K, nuevo) al nodo interno padre *)
fin
fin
hasta terminamos
fin;
Fin;170 Fundamentos de sistemas de bases de datos
‘SECUENCIA DE INSERCION: 8, 5, 1, 7, 3, 12, 9,6
Insertar 1: desbordamiento (nuevo nivel)
PAGING)
FJ Puna a nod de a
[] Puntero a datos
1 Insertar 7
[]revvodettinie regan oh
Insertar 3: desbordamiento (divisi6n)
i
STE, inonar 12 cesborcarions (vstn
'8e propaga, nuevo nivel)
/
ee ( 8 |g
\ yo
:
Tas p(s _f}~(boe top [fel
Insertar 6: oh
desbordamiento
(division, 86 on
\ H
718
tals Tt}>{[s. le m{f6 [oL7 [dll |[8 fol jol-m{[ 9 [ol 12 Ia
Figura 6.12. Ejemplo de insercidn en un arbol B* con P=3Y PhojaEstructuras de indices para ficheros 171
La Figura 6.12 ilustra la inserci6n de registros en un drbol B* de orden p = 3 Pyoja = 2. Pri-
mero, observamos que la raiz es el tinico nodo en el Arbol, asf que también es un nodo hoja, Tan
pronto como se crea mas de un nivel, el arbol se divide en nodos internos y nodos hoja. Observe
que todo valor de clave debe existir en el nivel de hoja, porque todos los punteros a datos estén en
ese nivel, Sin embargo, slo existen algunos valores en los nodos internos para guiar la busqueda.
Advierta también que todos los valores que aparecen en un nodo interno aparecen también como el
valor del extremo derecho en el nivel de hoja del subarbol al que apunta el. puntero de 4rbol que
est a la izquierda del valor.
Cuando se lena un nodo hoja y se inserta en él una nueva entrada, el nodo se desborda y hay
que dividirlo. Las primeras j = [((Pyoja + 1)/2)] entradas del nodo original se mantienen ahi, y las
demés se pasan a un nuevo nodo hoja. El j-ésimo valor de biisqueda se repite en el nodo interno
padre, y se crea en él un puntero adicional al nuevo nodo. Estos deben insertarse en el nodo padre
en su secuencia correcta. Si el nodo interno padre esté leno, el nuevo valor hard que se desborde
también y tendrd que dividirse. Las entradas en el nodo interno hasta P, (el j-ésimo puntero de
Arbol después de insertar el nuevo valor y el nuevo puntero, donde j = |((p + 1)/2)}) se conservan,
en tanto que el j-ésimo valor de busqueda se pasa al padre, sin duplicacién. Un nuevo nodo interno
contendrd las entradas desde P,, , hasta el final de las entradas del nodo (véase el Algoritmo 6.3).
Esta divisién puede propagarse hasta arriba para crear un nuevo nodo rafz, y por tanto, un nuevo
nivel del Arbol B+.
La Figura 6.13 ilustra la eliminacién en un 4rbol B*. Cuando se elimina una entrada, siempre
se hace del nivel de hoja. Si aparece en un nodo interno, también habré que quitarla de ahi. En este
caso, el valor que estd a su izquierda en el nodo hoja debe reemplazarlo en el nodo interno, porque
ahora es la entrada del extremo derecho del subérbol. La eliminacin puede causar insuficiencia si
reduce el ntimero de entradas del nodo hoja por debajo del minimo requerido. En este caso tratare-
mos de encontrar un nodo hoja hermano (uno que esté inmediatamente a la derecha o a la izquier-
da del nodo con insuficiencia) y redestribuiremos las entradas entre el nodo y su hermano de
modo que ambos estén ocupados por lo menos hasta la mitad; si esto no es posible, el nodo se
fusionard con sus hermanos, reduciéndose asi el nimero de nodos hoja. Un método comin consiste
en tratar de redistribuir las entradas con el hermano izquierdo; si esto no es posible, se intenta re-
distribuirlas con el hermano derecho. Si tampoco esto es factible, los tres nodos se fusionan para
formar dos nodos hoja. En este caso, es posible que la insuficiencia se propague a los nodos inter-
nos, al requerirse un puntero de 4rbol y un valor de busqueda menos. Esto puede propagarse y
reducir el niimero de niveles del Arbol.
Observe que la implementaci6n de los algoritmos para insertar y eliminar puede requerir punte-
ros al padre y a los hermanos en todos los nodos, o el empleo de una pila como en el Algoritmo
6.3. Cada nodo deberd incluir también el ntimero de entradas que contiene y su tipo (hoja o inter-
no). Otra alternativa es implementar la inserci6n y la eliminacién como procedimientos recursivos.
Variaciones de los érboles B y B*. Para concluir esta seccién, hagamos una breve mencién de
algunas variaciones de los arboles B y B +. En algunos casos la restriccién 5 de los Arboles B (0
B+), que obliga a todos los nodos a estar ocupados por lo menos hasta la mitad, se puede modifi-
car de modo que exija que todos los nodos estén ocupados por lo menos hasta las dos terceras
partes de su capacidad. A este tipo de drboles B se les ha llamado érboles B". En general, algunos
sistemas permiten que el usuario elija un factor de Henado de entre 0,5 y 1; este ultimo valor
indica que los nodos del arbol B (o del indice) deben estar completamente llenos. También es posi-
ble especificar dos factores de llenado para los drboles B+: uno para el nivel de hoja y otro para
Ios nodos internos del drbol. Al construirse inicialmente el indice, todos los nodos se ocupan hasta
alcanzar aproximadamente los factores de llenado especificados. En fechas recientes algunos in-
vestigadores han sugerido que el requerimiento de que un nodo esté Lleno hasta la mitad sea menos172 Fundamentos de sistemas de bases de datos
SECUENCIA DE ELIMINACION:
12,9
fol + jole fl eae
1 )o} 6 [0] fe 7 fo 8 [o}'2 [ol]e} [2
Eliminar 5 7 kl
fel 4 le ho |
1 |o} 6 jo} jo 7 |) je} 8 [oo ws
Eliminar 12: insufctencla
(redistribuir)
jp] 7 |e
of + ele Ph Welt
1 |o lo} je 7 |0| 8 |o| je—|| 9 jo}
Eliminar 9: insu
pl We il "Tzquierda, pa
redugcién de niveles)
y
1 |o} je 6 |o| 7 |o}| 8 Io)
Figura 6.13. Ejemplo de eliminacién en un arbol B*Cet
Estructuras de indices para ficheros 173
riguroso, y se permita que Hegue a estar completamente vacfo antes de efectuarse una fusi6n, a fin
de simplificar el algoritmo de eliminacién. Hay estudios de simulacién que indican que esto no
desperdicia demasiado espacio adicional si las inserciones y eliminaciones se distribuyen de forma
aleatoria.
ndices sobre claves multiples
Hasta ahora hemos asumido que Jas claves primarias 0 secundarias sobre las que se accede a los
ficheros eran atributos simples (campos). En algunas peticiones de recuperacién y modificacién
estén involucrados miltiples atributos. Si se usa una cierta combinaci6n de atributos muy frecuen-
temente, es mejor crear una estructura de acceso que proporcione un acceso eficiente mediante un
valor de clave que sea una combinaci6n de esos atributo:
Por ejemplo, considere un fichero EMPLEADOS que contiene los atributos DNO (nimero de depar-
tamento), EDAD, CALLE, CIUDAD, CODIGO_ZIP, SALARIO y CODIGO_CONOCIMIENTO y como clave NSS
(Ntimero de Seguridad Social). Considere la consulta: «Hacer una lista de los empleados del depar-
tamento ntimero 4 cuya edad sea 59». Nétese que tanto DNO como EDAD no son atributos clave, lo
que significa que un valor de busqueda para cualquiera de los dos apuntaré a miiltiples registros.
Se deben considerar las siguientes estrategias de busqueda alternativas:
1. Suponiendo que DNO tenga un indice pero no EDAD, acceder a los registros que cum-
plan DNO = 4 utilizando el indice y después seleccionar de ellos los que cumplan que
EDAD = 59.
2. Alternativamente, si EDAD tiene un indice pero no DNO, acceder a los registros que cum-
plan EDAD = 59 utilizando el indice y después seleccionar de ellos los que cumplan que
DNO = 4.
3. Si se han creado los indices sobre los dos, DNO y EDAD, se usardn ambos; cada uno devuelve
un conjunto de registros 0 un conjunto de punteros (a bloques 0 a registros). La intersec-
cin de estos conjuntos de registros o punteros proporciona los registros que satisfacen las
dos condiciones.
Eventualmente todas estas alternativas dan el resultado correcto. Sin embargo, si el conjunto de
registros que cumplen cada condicién (ONO = 4 y EDAD = 59) individualmente es grande, pero slo
unos pocos registros satisfacen la condicién combinada, ninguna de las anteriores es una técnica
eficiente para la peticién de busqueda dada. Existen varias posibilidades que tratarfan la combina-
cién