Professional Documents
Culture Documents
ALGEBRA RELACIONAL
El lgebra relacional es un lenguaje de consulta procedimental. Consta de un conjunto de
operaciones que toman como entrada una o dos relaciones y producen como resultado
una nueva relacin. Las operaciones fundamentales del lgebra relacional son seleccin,
proyeccin, unin, diferencia de conjuntos, producto cartesiano y renombramiento.
Adems de las operaciones fundamentales hay otras operaciones, por ejemplo,
interseccin de conjuntos, reunin natural, divisin y asignacin. Estas operaciones se
definirn en trminos de las operaciones fundamentales.
5.1 OPERACIONES FUNDAMENTALES DEL ALGEBRA RELACIONAL.
Las operaciones seleccin, proyeccin y renombramiento se denominan operaciones
unarias porque operan sobre una sola relacin. Las otras tres operaciones operan sobre
pares de relaciones y se denominan, por lo tanto, operaciones binarias.
La operacin seleccin
La operacin seleccin selecciona tuplas que satisfacen un predicado dado. Se utiliza la
letra griega sigma minscula () para denotar la seleccin. El predicado aparece como
subndice de . La relacin del argumento se da entre parntesis a continuacin de .
Si la relacin prstamo es como se muestra en la Figura 3.10. Se pueden buscar todas
las tuplas en las que el importe prestado sea mayor que 1.200 escribiendo
importe>1200 (prstamo)
En general, se permiten las comparaciones que utilizan =, , <, , > o en el predicado de
seleccin. Adems, se pueden combinar varios predicados en uno mayor utilizando las
conectivas y () y o (). Por tanto, para encontrar las tuplas correspondientes a
prstamos de ms de 1.200 concedidos por la sucursal de Navacerrada, se escribe
nombre-sucursal = Navacerrada importe>1200 (prstamo)
La operacin proyeccin
Supngase que se desea hacer una lista de todos los nmeros de prstamo y del importe
de los mismos, pero sin que aparezcan los nombres de las sucursales. La operacin
proyeccin permite producir esta relacin. La operacin proyeccin es una operacin
unaria que devuelve su relacin de argumentos, excluyendo algunos argumentos. Dado
que las relaciones son conjuntos, se eliminan todas las filas duplicadas. La proyeccin se
denota por la letra griega mayscula pi (). Se crea una lista de los atributos que se
desea que aparezcan en el resultado como subndice de . La relacin de argumentos se
escribe a continuacin entre parntesis. Por tanto, la consulta para crear una lista de
todos los nmeros de prstamo y del importe de los mismos puede escribirse como
nmero-prstamo, importe (prstamo)
Composicin de operaciones relacionales
Es importante el hecho de que el resultado de una operacin relacional sea tambin una
relacin. Considrese la consulta ms compleja Encontrar los clientes que viven en
Peguerinos. Hay que escribir:
Para contestar a la consulta hace falta la unin de estos dos conjuntos; es decir, hacen
falta todos los nombres de clientes que aparecen en alguna de las dos relaciones o en
ambas. Estos datos se pueden averiguar mediante la operacin binaria unin, denotada,
como en la teora de conjuntos, por . Por tanto, la expresin buscada es
nombre-cliente (prestatario) nombre-cliente (impositor)
Por tanto, para que una operacin unin r s sea vlida hay que exigir que se cumplan
dos condiciones:
1. Las relaciones r y s deben ser de la misma aridad. Es decir, deben tener el mismo
nmero de atributos.
2. Los dominios de los atributos i-simos de r y de s deben ser iguales para todo i.
Tngase en cuenta que r y s pueden ser, en general, relaciones temporales que sean
resultado de expresiones del lgebra relacional.
La operacin diferencia de conjuntos
La operacin diferencia de conjuntos, denotada por , permite buscar las tuplas que
estn en una relacin pero no en la otra. La expresin r s da como resultado una
relacin que contiene las tuplas que estn en r pero no en s. Se pueden buscar todos los
clientes del banco que tienen abierta una cuenta pero no tienen concedido ningn
prstamo escribiendo
nombre-cliente (impositor) nombre-cliente (prestatario)
La relacin resultante de esta consulta aparece en la Figura 3.13. Como en el caso de la
operacin unin, hay que asegurarse de que las diferencias de conjuntos se realicen
entre relaciones compatibles. Por tanto, para que una
FIGURA 3.12. Nombres de todos los clientes que tienen un prstamo o una cuenta.
FIGURA 3.13. Clientes con cuenta abierta pero sin prstamo concedido.
Operacin diferencia de conjuntos r s sea vlida hay que exigir que las relaciones r y s
sean de la misma aridad y que los dominios de los atributos i-simos de r y s sean
iguales.
La operacin producto cartesiano
La operacin producto cartesiano, denotada por un aspa (x), permite combinar
informacin de cualesquiera dos relaciones. El producto cartesiano de las relaciones r1 y
r2 como r1 x r2. Recurdese que las relaciones se definen como subconjuntos del
producto cartesiano de un conjunto de dominios. A partir de esta definicin ya se debe
tener una intuicin sobre la definicin de la operacin producto cartesiano. Sin embargo,
dado que el mismo nombre de atributo puede aparecer tanto en r1 como en r2, hay que
crear un esquema de denominaciones para distinguir entre ambos atributos. En este caso
se logra adjuntando al atributo el nombre de la relacin de la que proviene originalmente.
Por ejemplo, el esquema de relacin de r = prestatario x prstamo es
(Prestatario. Nombre - cliente, prestatario. Nmero-prstamo, prstamo. nombre-sucursal,
prstamo.
nmero-prstamo, prstamo . importe)
Con este esquema se puede distinguir entre prestatario. nmero-prstamo y prstamo.
nmero-prstamo. Para los atributos que slo aparecen en uno de los dos esquemas se
suele omitir el prefijo con el nombre de la relacin Por tanto, se puede escribir el esquema
de relacin de r como
(nombre-cliente, prestatario. nmero-prstamo,
nombre-sucursal, prstamo. nmero-prstamo, importe)
El acuerdo de denominaciones precedente exige que las relaciones que sean argumentos
de la operacin producto cartesiano tengan nombres diferentes. Esta exigencia causa
problemas en algunos casos, como cuando se desea calcular el producto cartesiano de
una relacin consigo misma. Se produce un problema similar si se utiliza el resultado de
una expresin del lgebra relacional en un producto cartesiano, dado que har falta un
nombre para la relacin para poder hacer referencia a sus atributos.
Ahora que se conoce el esquema de relacin de r = prestatario x prstamo hay que
averiguar las tuplas que aparecern en r. Supngase que se tienen n1 tuplas en
prestatario y n2 tuplas en prstamo. Por tanto, hay n1 * n2 maneras de escoger un par de
tuplas, una tupla de cada relacin; por lo que hay n1 * n2 tuplas en r. En concreto,
obsrvese que para algunas tuplas t de r puede ocurrir que t[prestatario . nmeroprstamo] t[prstamo.nmero-prstamo]. En general, si se tienen las relaciones r1 (R1)
y r2 (R2), r1 x r2 es una relacin cuyo esquema es la concatenacin de R1 y de R2. La
relacin R contiene todas las tuplas t para las que hay unas tuplas t1 en r1 y t2 en r2 para
las que t[R1] = t1[R1] y t[R2] = t2[R2.
La operacin renombramiento
A diferencia de las relaciones de la base de datos, los resultados de las expresiones de
lgebra relacional no tienen un nombre que se pueda utilizar para referirse a ellas.
Resulta til poder ponerles nombre; el operador
Renombramiento, denotado por la letra griega rho minscula (), permite realizar esta
tarea. Dada una expresin E del lgebra relacional, la expresin
x (E)
Devuelve el resultado de la expresin E con el nombre x.. Por tanto, tambin se puede
aplicar la operacin renombramiento a una relacin r para obtener la misma relacin con
un nombre nuevo. Otra forma de la operacin renombramiento es la siguiente. Supngase
que una expresin del lgebra relacional E tiene aridad n. Por tanto, la expresin
x (A1, A2, An) (E)
Devuelve el resultado de la expresin E con el nombre x y con los atributos con el nombre
cambiado a A1, A2,, An. Paso 1: Para calcular la relacin intermedia hay que comparar
los valores de los saldos de todas las cuentas.
Esta comparacin se puede hacer calculando el producto cartesiano cuenta x cuenta y
formando una seleccin para comparar el valor de cualesquiera dos saldos que
aparezcan en una tupla. En primer lugar hay que crear un mecanismo para distinguir entre
los dos atributos saldo. Se utilizar la operacin renombramiento para cambiar el nombre
de una referencia a la relacin cuenta. La relacin temporal que se compone de los saldos
que no son el mximo puede escribirse ahora como
cuenta.saldo (cuenta.saldo < d. saldo (cuenta x d (cuenta)))
Paso 2: La consulta para averiguar el mximo saldo de cuenta del banco puede escribirse
de la manera siguiente:
saldo (cuenta) cuenta.saldo (cuenta.saldo < d.saldo(cuenta x d (cuenta)))
Considrese la siguiente consulta como un nuevo ejemplo de la operacin
renombramiento: Averiguar los nombres de todos los clientes que viven en la misma
calle y en la misma ciudad que Gmez. Se puede obtener la calle y la ciudad en la que
vive Gmez escribiendo
calle-cliente, ciudad-cliente (nombre-cliente = Gmez (cliente))
Sin embargo, para hallar a otros clientes que vivan en esa calle y en esa ciudad hay que
hacer referencia por segunda vez a la relacin cliente. En la consulta siguiente se utiliza la
operacin renombramiento sobre la expresin anterior para darle al resultado el nombre
direccin-Gmez y para cambiar el nombre de los atributos a calle y ciudad en lugar de
calle-cliente y ciudad-cliente:
cliente.nombre-cliente (cliente.calle-cliente = direccin-Gmez
cliente.ciudad-cliente = direccin-Gmez. ciudad (cliente
direccin-Gmez (calle, ciudad) (calle-cliente, ciudad-cliente
(nombre-cliente = Gmez (cliente)))))
La operacin renombramiento no es estrictamente necesaria, dado que es posible utilizar
una notacin posicional para los atributos. La notacin posicional tambin se aplica a los
resultados de las operaciones del lgebra relacional.
1. t est en R S (r)
2. Para cada tupla tS de s hay una tupla tr de r que cumple las dos condiciones
siguientes:
a. tr[S] = ts[S]
b. tr[R S] = t
Puede resultar sorprendente descubrir que, dados una operacin divisin y los esquemas
de las relaciones, se puede, de hecho, definir la operacin divisin en trminos de las
operaciones fundamentales. Sean r(R) y s(S) dadas, con S R:
r s = R S (r) R S ((R S (r) x s) R S, S (r))
Para comprobar que esta expresin es verdadera, obsrvese que R S (r) da todas las
tuplas t que cumplen la primera condicin de la definicin de la divisin. La expresin del
lado derecho del operador diferencia de conjuntos,
R S ((R S (r) x s) R S, S (r)),
sirve para borrar esas tuplas que no cumplen la segunda condicin de la definicin de la
divisin. Esto se logra de la manera siguiente. Considrese R S (r) s.
Esta relacin
est en el esquema R y empareja cada tupla de R S (r) con cada tupla de s. La
expresin R S, S (r) slo reordena los atributos de r.
Por tanto, (R S (r) s)
R S, S (r) genera los pares de tuplas de R S (r) y de s
que no aparecen en r. Si una tupla tj est en
R S ((R S (r) x s) R S, S (r)),
hay alguna tupla ts de s que no se combina con la tupla tj para formar una tupla de r. Por
tanto, tj guarda un valor de los atributos R S que no aparece en r s.
Estos valores son
los que se eliminan de R S (r).
La operacin asignacin
En ocasiones resulta conveniente escribir una expresin del lgebra relacional por partes
utilizando la asignacin a una variable de relacin temporal. La operacin asignacin,
denotada por , acta de manera parecida a la asignacin de los lenguajes de
programacin
5.3 LGEBRA RELACIONAL EXTENDIDA.
Las operaciones bsicas del lgebra relacional se han ampliado de varias maneras. Una
ampliacin sencilla es permitir operaciones aritmticas como parte de la proyeccin. Una
ampliacin importante es permitir operaciones de agregacin, como el clculo de la suma
de los elementos de un conjunto, o su media. Otra ampliacin importante es la operacin
reunin externa, que permite a las expresiones del lgebra relacional trabajar con los
valores nulos que modelan la informacin que falta.
Proyeccin generalizada
La operacin proyeccin generalizada ampla la operacin proyeccin permitiendo que
se utilicen funciones aritmticas en la lista de proyeccin. La operacin proyeccin
generalizada tiene la forma
F1, F2, , Fn (E)
donde E es cualquier expresin del lgebra relacional y F1, F2, , Fn son expresiones
aritmticas que incluyen constantes y atributos en el esquema de E. Como caso especial
la expresin aritmtica puede ser simplemente un atributo o una constante. Por ejemplo,
supngase que se dispone de una relacin informacin-crdito, como se muestra en la
Figura 3.25, que da el lmite de crdito y el importe dispuesto
sum toma un conjunto de valores y devuelve la suma de los mismos. Por tanto, la funcin
sum aplicada a la coleccin {1, 1, 3, 4, 4, 11} devuelve el valor 24. La funcin de
agregacin avg devuelve la media de los valores. Cuando se aplica al conjunto anterior
devuelve el valor 4. La funcin de agregacin count devuelve el nmero de elementos del
conjunto, y devolvera 6 en el caso anterior. Otras funciones de agregacin habituales son
min y max, que devuelven el valor mnimo y el mximo de la coleccin. Las colecciones
en las que operan las funciones de agregacin pueden tener valores repetidos; el orden
en el que aparezcan los valores no tiene importancia. Estas colecciones se denominan
multiconjuntos. Los conjuntos son un caso especial de los multiconjuntos, en los que
slo hay una copia de cada elemento.
El smbolo G es la letra G en el tipo de letra caligrfico; se lee G caligrfica. La
operacin del lgebra relacional G significa que se debe aplicar agregacin, y el subndice
indica la operacin de agregacin a aplicar. El resultado de la expresin anterior es una
relacin con un nico atributo, que contiene una sola fila con un valor correspondiente a la
suma de los sueldos de todos los trabajadores que trabajan en el banco a tiempo parcial.
Hay casos en los que se deben borrar los valores repetidos antes de calcular una funcin
de agregacin. Si se desean borrar los valores repetidos hay que utilizar los mismos
nombres de funciones que antes, con la cadena de texto distinct precedida de un
guin aadida al final del nombre de la funcin (por ejemplo, count-distinct.
Esta consulta se escribe de la manera siguiente:
Gcount-distinct(nombre-sucursal) (trabajo-por-horas)
Reunin externa
La operacin reunin externa es una ampliacin de la operacin reunin para trabajar
con la informacin que falta.
La reunin externa por la izquierda ( ) toma todas las tuplas de la relacin de la
izquierda que no coincidan con ninguna tupla de la relacin de la derecha, las rellena con
valores nulos en todos los dems atributos de la relacin de la derecha y las aade al
resultado de la reunin natural.
La reunin externa por la derecha ( ) es simtrica de la reunin externa por la izquierda.
Las tuplas de la relacin de la derecha que no coincidan con ninguna tupla de la relacin
de la izquierda se rellenan con valores nulos y se aaden al resultado de la reunin
natural.
La reunin externa completa ( ) realiza estas dos operaciones, rellenando las tuplas de
la relacin de la izquierda que no coincidan con ninguna tupla de la relacin de la derecha
y las tuplas de la relacin de la derecha que no coincidan con ninguna tupla de la relacin
de la izquierda, y aadindolas al resultado de la reunin.
agregados, la operacin borra los valores nulos del resultado antes de aplicar la
agregacin. Si el multiconjunto resultante est vaco, el resultado agregado es nulo.
Obsrvese que el tratamiento de los valores nulos aqu es diferente que en las
expresiones aritmticas ordinarias; se podra haber definido el resultado de una operacin
de agregacin como nulo si incluso slo uno de los valores agregados es nulo. Sin
embargo, esto significara que un nico valor desconocido en un gran grupo podra hacer
que el resultado agregado sobre el grupo fuese nulo, y se perdera una gran cantidad de
informacin til.
Reunin externa: las operaciones de reunin externa se comportan como las
operaciones reunin, excepto sobre las tuplas que no aparecen en el resultado. Estas
tuplas se pueden aadir al resultado (dependiendo de si la operacin es, o ) aadiendo
nulos.
5.5 OPERACIONES MODIFICACIN DE LA BASE DE DATOS.
se abordar la manera de insertar, borrar o modificar informacin de la base de datos. Las
modificaciones de la base de datos se expresan utilizando la operacin asignacin. Las
asignaciones a las relaciones reales de la base de datos.
Borrado
Las solicitudes de borrado se expresan bsicamente igual que las consultas. Sin
embargo, en lugar de mostrar las tuplas al usuario, se eliminan de la base de datos las
tuplas seleccionadas. Slo se pueden borrar tuplas enteras; no se pueden borrar valores
de atributos concretos. En el lgebra relacional los borrados se expresan mediante
rrE
donde r es una relacin y E es una consulta del lgebra relacional. He aqu varios
ejemplos de solicitudes de borrado del lgebra relacional:
Borrar todas las cuentas de Gmez.
impositor impositor nombre-cliente = Gmez (impositor)
Borrar todos los prstamos con importes entre 0 y 50.
prstamo prstamo importe 0 and importe 50 (prstamo)
Borrar todas las cuentas de las sucursales sitas en Getafe.
r1 ciudad-sucursal = Getafe (cuenta sucursal)
r2 nombre-sucursal, nmero-cuenta, saldo (r1)
cuenta cuenta r2
Insercin
Para insertar datos en una relacin hay que especificar la tupla que se va a insertar o
escribir una consulta cuyo resultado sea un conjunto de tuplas que vayan a insertarse.
Evidentemente, el valor de los atributos de las tuplas insertadas deben ser miembros del
dominio de cada atributo. De manera parecida, las tuplas insertadas deben ser de la
aridad correcta. En el lgebra relacional las inserciones se expresan mediante
rrE
donde r es una relacin y E es una expresin del lgebra relacional. La insercin de una
sola tupla se expresa haciendo que E sea una relacin constante que contiene una tupla.
Supngase que se desea insertar el hecho de que Gmez tiene 1.200 en la cuenta C973 en la sucursal de Navacerrada. Hay que escribir
cuenta cuenta {(C-973, Navacerrada, 1200)} impositor impositor {(Gmez,
C-973)}
Actualizacin
Puede que, en algunas situaciones, se desee modificar un valor de una tupla sin modificar
todos los valores de la tupla. Se puede utilizar el operador proyeccin generalizada para
realizar esta tarea:
rF1, F2, , Fn (r)
donde cada Fi es el i-simo atributo de r, si el i-simo atributo no est actualizado, o, si
hay que actualizar el atributo, una expresin, que slo implica constantes y los atributos
de r, que da el nuevo valor del atributo. Si se desea seleccionar varias tuplas de r y slo
actualizar esas mismas tuplas, se puede utilizar la expresin siguiente, donde P denota la
condicin de seleccin que escoge las tuplas que hay que actualizar:
r F1, F2, , Fn (P (r)) (r P (r))
Para ilustrar el uso de la operacin actualizacin supngase que se realiza el pago de los
intereses y que hay que aumentar todos los saldos en un 5 por ciento. Hay que escribir
cuenta nombre-sucursal, nmero-cuenta, saldo, saldo * 1.05 (cuenta)
Supngase ahora que las cuentas con saldos superiores a 10.000 reciben un inters del
6 por ciento mientras que los dems reciben un 5 por ciento. Hay que escribir
cuenta NS, NC, saldo * 1.06 (saldo > 10000 (cuenta))
cuenta NS, NC, saldo * 1.05 (saldo 10000 (cuenta))
donde las abreviaturas NS y NC sustituyen a nombresucursal y a nmero-cuenta,
respectivamente.