0% encontró este documento útil (0 votos)
51 vistas13 páginas

Álgebra Relacional: Operaciones Clave

El álgebra relacional es un lenguaje de consultas que consta de operaciones como selección, proyección, unión y producto cartesiano. Estas operaciones toman como entrada una o dos relaciones y producen una nueva relación como salida. Las operaciones se pueden componer para crear consultas más complejas, ya que el resultado de cada operación es también una relación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas13 páginas

Álgebra Relacional: Operaciones Clave

El álgebra relacional es un lenguaje de consultas que consta de operaciones como selección, proyección, unión y producto cartesiano. Estas operaciones toman como entrada una o dos relaciones y producen una nueva relación como salida. Las operaciones se pueden componer para crear consultas más complejas, ya que el resultado de cada operación es también una relación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

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 relación. Las operaciones fundamentales
del álgebra relacional son selección, proyección, unión, diferencia de conjuntos,
producto cartesiano y renombramiento. Además de las operaciones
fundamentales hay otras operaciones, por ejemplo, intersección de conjuntos,
reunión natural, división y asignación. Estas operaciones se definirán en
términos de las operaciones fundamentales.

Operaciones fundamentales

Las operaciones selección, proyección y renombramiento se denominan


operaciones unarias porque operan sobre una sola relación. Las otras tres
operaciones operan sobre pares de relaciones y se denominan, por lo tanto,
operaciones binarias.

La operación selección

La operación selección selecciona tuplas que satisfacen un predicado dado. Se


utiliza la letra griega sigma minúscula (σ) para denotar la selección. El
predicado aparece como subíndice de σ. La relación del argumento se da entre
paréntesis a continuación de σ. Por tanto, para seleccionar las tuplas de la
relación préstamo en que la sucursal es «Navacerrada» hay que escribir:

σnombre-sucursal = «Navacerrada» (préstamo)


Si la relación préstamo es como se muestra a continuación:

la relación que resulta de la consulta anterior es:

Se pueden buscar todas las tuplas en las que el importe prestado sea mayor
que 1.200 escribiendo:

σimporte>1200 (préstamo)
En general, se permiten las comparaciones que utilizan =, ≠, <, ≤, > o ≥ en el
predicado de selección. Además, se pueden combinar varios predicados en
uno mayor utilizando las conectivas y (∧) y o (∨). Por tanto, para encontrar las
tuplas correspondientes a préstamos de más de 1.200 concedidos por la
sucursal de Navacerrada, se escribe:

σnombre-sucursal = «Navacerrada» ∧ importe>1200 (préstamo)

El predicado de selección puede incluir comparaciones entre dos atributos.


Para ilustrarlo, considérese la relación responsable-préstamo, que consta de
tres atributos: nombre-cliente, nombre-banquero y número-préstamo, que
especifica que un empleado concreto es el responsable del préstamo
concedido a un cliente. Para hallar todos los clientes que se llaman igual que
su responsable de préstamos se puede escribir:

σnombre-cliente = nombre-banquero (responsable-préstamo)


Dado que el valor especial nulo indica «valor desconocido o inexistente»,
cualquier comparación que implique a un valor nulo se evalúa como falsa.

La operación proyección

Supóngase que se desea hacer una lista de todos los números de préstamo y
del importe de los mismos, pero sin que aparezcan los nombres de las
sucursales. La operación proyección permite producir esta relación. La
operación proyección es una operación unaria que devuelve su relación de
argumentos, excluyendo algunos argumentos. Dado que las relaciones son
conjuntos, se eliminan todas las filas duplicadas. La proyección se denota por
la letra griega mayúscula pi (Π). Se crea una lista de los atributos que se desea
que aparezcan en el resultado como subíndice de Π. La relación de
argumentos se escribe a continuación entre paréntesis. Por tanto, la consulta
para crear una lista de todos los números de préstamo y del importe de los
mismos puede escribirse como:

Πnúmero-préstamo, importe (préstamo)


La relación que resulta de esta consulta es la siguiente:
Composición de operaciones relacionales

Es importante el hecho de que el resultado de una operación relacional sea


también una relación. Considérese la consulta más compleja «Encontrar los
nombres de clientes que viven en Peguerinos». Hay que escribir:

Πnombre-cliente ( σciudad-cliente = «Peguerinos» (cliente))

Téngase en cuenta que, en vez de dar en el argumento de la operación


proyección el nombre de una relación, se da una expresión que se evalúa
como una relación. En general, dado que el resultado de una operación del
álgebra relacional es del mismo tipo (relación) que los datos de entrada, las
operaciones del álgebra relacional pueden componerse para formar una
expresión del álgebra relacional. La composición de operaciones del álgebra
relacional para formar expresiones del álgebra relacional es igual que la
composición de operaciones aritméticas (como +, –, * y ÷) para formar
expresiones aritméticas.

La operación unión

Considérese una consulta para averiguar el nombre de todos los clientes del
banco que tienen una cuenta, un préstamo o ambas cosas. Obsérvese que la
relación cliente no contiene esa información:

dado que los clientes no necesitan tener ni cuenta ni préstamo en el banco.


Para contestar a esta consulta hace falta la información de la relación
impositor:
y la de la relación prestatario

Se conoce la manera de averiguar los nombres de todos los clientes con


préstamos en el banco:

Πnombre-cliente (prestatario)

También se conoce la manera de averiguar el nombre de los clientes con


cuenta en el banco:

Πnombre-cliente (impositor)

Para contestar a la consulta hace falta la unión 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
operación binaria unión, denotada, como en la teoría de conjuntos, por ∪. Por
tanto, la expresión buscada es:

Πnombre-cliente (prestatario) ∪ Πnombre-cliente (impositor)

La relación resultante de esta consulta es:


Téngase en cuenta que en el resultado hay diez tuplas, aunque hay siete
prestatarios y seis impositores distintos. Esta discrepancia aparente se debe a
que Gómez, Santos y López son a la vez prestatarios e impositores. Dado que
las relaciones son conjuntos, se eliminan los valores duplicados.

Obsérvese que en este ejemplo se toma la unión de dos conjuntos, ambos


consistentes en valores de nombre-cliente. En general, se debe asegurar que
las uniones se realicen entre relaciones compatibles. Por ejemplo, no tendría
sentido realizar la unión de las relaciones préstamo y prestatario. La primera es
una relación con tres atributos, la segunda sólo tiene dos. Más aún,
considérese la unión de un conjunto de nombres de clientes y de un conjunto
de ciudades. Una unión así no tendría sentido en la mayor parte de los casos.
Por tanto, para que una operación unión r ∪ s sea válida 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 número de atributos.
2. Los dominios de los atributos i-ésimos de r y de s deben ser iguales para
todo i.

Téngase en cuenta que r y s pueden ser, en general, relaciones temporales


que sean resultado de expresiones del álgebra relacional.

La operación diferencia de conjuntos

La operación diferencia de conjuntos, denotada por –, permite buscar las


tuplas que estén en una relación pero no en la otra. La expresión r – s da como
resultado una relación que contiene las tuplas que están en r pero no en s. Se
pueden buscar todos los clientes del banco que tienen abierta una cuenta pero
no tienen concedido ningún préstamo escribiendo:

Πnombre-cliente (impositor) – Πnombre-cliente (prestatario)

La relación resultante de esta consulta es:


Como en el caso de la operación unión, hay que asegurarse de que las
diferencias de conjuntos se realicen entre relaciones compatibles. Por tanto,
para que una operación diferencia de conjuntos r – s sea válida 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 operación producto cartesiano

La operación producto cartesiano, denotada por un aspa (×), permite


combinar información de cualesquiera dos relaciones. El producto cartesiano
de las relaciones r1 y r2 como r1 × r2. Recuérdese que las relaciones se
definen como subconjuntos del producto cartesiano de un conjunto de
dominios. A partir de esta definición ya se debe tener una intuición sobre la
definición de la operación 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 relación de la que
proviene originalmente. Por ejemplo, el esquema de relación de r = prestatario
× préstamo es:

(prestatario.nombre-cliente, prestatario.número-préstamo, préstamo.nombre-sucursal,


préstamo.número-préstamo, préstamo.importe)

Con este esquema se puede distinguir entre prestatario.número-préstamo y


préstamo.número-préstamo.

Para los atributos que sólo aparecen en uno de los dos esquemas se suele
omitir el prefijo con el nombre de la relación. Esta simplificación no genera
ambigüedad alguna. Por tanto, se puede escribir el esquema de relación de r
como:

(nombre-cliente, prestatario.número-préstamo, nombre-sucursal, préstamo.número-


préstamo, importe)

El acuerdo de denominaciones precedente exige que las relaciones que sean


argumentos de la operación producto cartesiano tengan nombres diferentes.
Esta exigencia causa problemas en algunos casos, como cuando se desea
calcular el producto cartesiano de una relación consigo misma. Se produce un
problema similar si se utiliza el resultado de una expresión del álgebra
relacional en un producto cartesiano, dado que hará falta un nombre para la
relación para poder hacer referencia a sus atributos. Para evitar estos
problemas se utiliza la operación de renombramiento.
Ahora que se conoce el esquema de relación de r = prestatario × préstamo hay
que averiguar las tuplas que aparecerán en r. Como se podía imaginar, se crea
una tupla de r a partir de cada par de tuplas posible: una de la relación
prestatario y otra de la relación préstamo.

Por tanto, r es una relación de gran tamaño, como se puede ver en la siguiente
figura:

donde sólo se ha incluido una parte de las tuplas que forman parte de r.

Supóngase que se tienen n1 tuplas en prestatario y n2 tuplas en préstamo. Por


tanto, hay n1 * n2 maneras de escoger un par de tuplas, una tupla de cada
relación; por lo que hay n1 * n2 tuplas en r. En concreto, obsérvese que para
algunas tuplas t de r puede ocurrir que t[prestatario.número-préstamo] ≠
r[préstamo.número-préstamo].

Supóngase que se desea averiguar los nombres de todos los clientes que
tienen concedido un préstamo en la sucursal de Navacerrada. Se necesita para
ello información de las relaciones préstamo y prestatario. Si se escribe
σnombre-sucursal = «Navacerrada» (prestatario x préstamo)
entonces el resultado es la relación será:

Se tiene una relación que sólo atañe a la sucursal de Navacerrada. Sin


embargo, la columna nombre-cliente puede contener clientes que no tengan
concedido ningún préstamo en la sucursal de Navacerrada. (Si no se ve el
motivo por el que esto es cierto, recuérdese que el producto cartesiano toma
todos los emparejamientos posibles de una tupla de prestatario con una tupla
de préstamo.)

Dado que la operación producto cartesiano asocia todas las tuplas de préstamo
con todas las tuplas de prestatario, se sabe que, si un cliente tiene concedido
un préstamo en la sucursal de Navacerrada, hay alguna tupla de prestatario x
préstamo que contiene su nombre y que prestatario.número-préstamo =
préstamo.número-préstamo. Por tanto, si escribimos

σprestatario.número-préstamo = préstamo.número-préstamo
( σnombre-sucursal = «Navacerrada» (prestatario x préstamo))

sólo se obtienen las tuplas de prestatario x préstamo que corresponden a los


clientes que tienen concedido un préstamo en la sucursal de Navacerrada.
Finalmente, dado que sólo se desea obtener nombre-cliente, se realiza una
proyección:

Πnombre-cliente ( σprestatario.número-préstamo = préstamo.número-préstamo


( σnombre-sucursal = «Navacerrada» (prestatario x⋅ préstamo)))

El resultado de esta expresión se muestra en la siguiente figura que muestra la


respuesta correcta a la consulta formulada.
La operación 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 minúscula (ρ), permite
realizar esta tarea.

Para ilustrar el uso del renombramiento de las relaciones, considérese la


consulta «Buscar el máximo saldo de cuenta del banco». La estrategia
empleada para obtener el resultado es:

1) Calcular una relación intermedia consistente en los saldos que no son el


máximo y
2) realizar la diferencia entre la relación Πsaldo (cuenta) y la relación intermedia
recién calculada.

Paso 1: Para calcular la relación intermedia hay que comparar los valores de
los saldos de todas las cuentas. Esta comparación se puede hacer calculando
el producto cartesiano cuenta x cuenta y formando una selección 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 operación renombramiento para cambiar el nombre de
una referencia a la relación cuenta; así, se puede hacer referencia dos veces a
la relación sin ambigüedad alguna.

La relación temporal que se compone de los saldos que no son el máximo


puede escribirse ahora como
Πcuenta.saldo ( σcuenta.saldo < d.saldo (cuenta ⋅ ρd (cuenta)))

Esta expresión proporciona los saldos de la relación cuenta para los que
aparece un saldo mayor en alguna parte de la relación cuenta (cuyo nombre
se ha cambiado a d). El resultado contiene todos los saldos salvo el máximo.
Esta relación se muestra en la siguiente figura:
Paso 2: La consulta para averiguar el máximo saldo de cuenta del banco
puede escribirse de la manera siguiente:

Πsaldo (cuenta) – Πcuenta.saldo ( σcuenta.saldo < d.saldo (cuenta ⋅ ρd (cuenta)))

En la siguiente figura:

se muestra el resultado de esta consulta. Considérese la siguiente consulta


como un nuevo ejemplo de la operación renombramiento: «Averiguar los
nombres de todos los clientes que viven en la misma calle y en la misma
ciudad que Gómez». Se puede obtener la calle y la ciudad en la que vive
Gómez escribiendo:

Πcalle-cliente, ciudad-cliente ( σnombre-cliente = «Gómez» (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 relación cliente. En la consulta
siguiente se utiliza la operación renombramiento sobre la expresión anterior
para darle al resultado el nombre dirección-Gómez 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 = dirección-Gómez.calle ∧


cliente.ciudad-cliente = dirección-Gómez.ciudad (cliente ⋅

ρdirección-Gómez (calle, ciudad) (Πcalle-cliente, ciudad-cliente


( σnombre-cliente = «Gómez» (cliente)))))

El resultado de esta consulta, cuando se aplica a la relación cliente es:


Otras operaciones

Las operaciones fundamentales del álgebra relacional son suficientes para


expresar cualquier consulta del álgebra relacional. Sin embargo, si uno se limita
únicamente a las operaciones fundamentales, algunas consultas habituales
resultan de expresión intrincada. Por tanto, se definen otras operaciones que
no añaden potencia al álgebra, pero que simplifican las consultas habituales.

La operación intersección de conjuntos

Supóngase que se desea averiguar todos los clientes que tienen un préstamo
concedido y una cuenta abierta. Utilizando la intersección de conjuntos (∩) se
puede escribir:

Πnombre-cliente (prestatario)∩Πnombre-cliente (impositor)

Obsérvese que se puede volver a escribir cualquier expresión del álgebra


relacional utilizando la intersección de conjuntos sustituyendo la operación
intersección por un par de operaciones de diferencia de conjuntos, de la
manera siguiente:

r ∩ s = r – (r – s)

Por tanto, la intersección de conjuntos no es una operación fundamental y no


añade potencia al álgebra relacional. Sencillamente, es más conveniente
escribir r ∩ s que r – (r – s).

La operación reunión natural

Suele resultar deseable simplificar ciertas consultas que exigen un producto


cartesiano. Generalmente, las consultas que implican un producto cartesiano
incluyen un operador selección sobre el resultado del producto cartesiano.

Considérese la consulta «Hallar los nombres de todos los clientes que tienen
concedido un préstamo en el banco y averiguar el importe del mismo». En
primer lugar se calcula el producto cartesiano de las relaciones prestatario y
préstamo. Luego, se seleccionan las tuplas que sólo atañen al mismo número-
préstamo, seguidas por la proyección de nombre-cliente, número-préstamo e
importe resultantes:
Πnombre-cliente, préstamo.número-préstamo, importe
( σprestatario.número-préstamo = préstamo.número-préstamo
(prestatario X préstamo))

La reunión natural es una operación binaria que permite combinar ciertas


selecciones y un producto cartesiano en una sola operación. Se denota por el
símbolo de la «reunión» . La operación reunión natural forma un producto
cartesiano de sus dos argumentos, realiza una selección forzando la igualdad
de los atributos que aparecen en ambos esquemas de relación y, finalmente,
elimina los atributos duplicados.

Aunque la definición de la reunión natural es compleja, la operación es sencilla


de aplicar. Como ilustración, considérese nuevamente el ejemplo «Averiguar
los nombres de todos los clientes que tienen concedido un préstamo en el
banco y averiguar su importe». Esta consulta puede expresarse utilizando la
reunión natural de la manera siguiente:

Πnombre-cliente, número-préstamo, importe (prestatario préstamo)

Después de realizar la proyección, se obtiene la relación:

La operación división

La operación división, denotada por , resulta adecuada para las consultas que
incluyen la expresión «para todos». Supóngase que se desea hallar a todos los
clientes que tengan abierta una cuenta en todas las sucursales ubicadas en la
ciudad de Arganzuela. Se pueden obtener todas las sucursales de Arganzuela
mediante la expresión:

r1 = Πnombre-sucursal ( σciudad-sucursal = «Arganzuela» (sucursal))

La relación resultante de esta expresión es:


Se pueden encontrar todos los pares (nombre-cliente, nombre-sucursal) para
los que el cliente tiene una cuenta en una sucursal escribiendo:

r2 = Πnombre-cliente, nombre-sucursal (impositor cuenta)

Ahora hay que hallar los clientes que aparecen en r2 con los nombres de todas
las sucursales de r1.

La operación que proporciona exactamente esos clientes es la operación


división. La consulta se formula escribiendo:

Πnombre-cliente, nombre-sucursal (impositor cuenta)


Πnombre-sucursal ( σciudad-sucursal = «Arganzuela» (sucursal))

El resultado de esta expresión es una relación que tiene el esquema (nombre-


cliente, nombre-sucursal) y que contiene la tupla (Gómez, Centro y González,
Galapar).

También podría gustarte