Páginas

martes, 7 de enero de 2014

3.2. Álgebra relacional

El álgebra relacional es un lenguaje formal con una serie de operadores que
trabajan sobre una o varias relaciones para obtener otra relación resultado, sin
que cambien las relaciones originales. Tanto los operandos como los resultados
son relaciones, por lo que la salida de una operación puede ser la entrada de otra
operación. Esto permite anidar expresiones del álgebra, del mismo modo que
se pueden anidar las expresiones aritméticas. A esta propiedad se le denomina
clausura: las relaciones son cerradas bajo el álgebra, del mismo modo que los
números son cerrados bajo las operaciones aritméticas.
En este apartado se describen, en primer lugar, los ocho operadores ori-
ginalmente propuestos por Codd, y después se estudian algunos operadores
adicionales que añaden potencia al lenguaje.
De los ocho operadores, sólo hay cinco que son fundamentales: restricción,
proyección, producto cartesiano, unión y diferencia. Los operadores fundamen-
tales permiten realizar la mayoría de las operaciones de obtención de datos.
Los operadores no fundamentales son la concatenación (join), la intersección
y la división, que se pueden expresar a partir de los cinco operadores funda-
mentales.
La restricción y la proyección son operaciones unarias porque operan sobre
una sola relación. El resto de las operaciones son binarias porque trabajan
sobre pares de relaciones. En las definiciones que se presentan a continuación, se
supone que R y S son dos relaciones cuyos atributos son A = (a1,a2,...,aN)
y B = (b1,b2,...,bM) respectivamente.
A continuación, se presentan los operadores del álgebra relacional, mos-
trando su uso mediante breves ejemplos. Todos estos ejemplos están basados
en el esquema de la base de datos relacional presentada en el capítulo anterior
(apartado 2.3).

Ejemplo 3.1 Obtener todos los artículos que tienen un precio superior a 10 e.
Expresión del álgebra relacional que obtiene los datos especificados:
ARTICULOS WHERE precio>10
Resultado:

Ejemplo 3.2 Obtener los artículos cuyo stock es de menos de 5 unidades y
además se ha quedado al mínimo o por debajo.
Expresión del álgebra relacional que obtiene los datos especificados:
Resultado:


Ejemplo 3.3 Obtener un listado de vendedores mostrando su código, su nom-
bre y su código postal.
Expresión del álgebra relacional que obtiene los datos especificados:

VENDEDORES[codven,nombre,codpostal]
Resultado:
o 3.4 Obtener los códigos de las poblaciones donde hay clientes.
Expresión del álgebra relacional que obtiene los datos especificados:
CLIENTES[codpue]
Resultado:


La restricción y la proyección son operaciones que permiten extraer información de una sola relación. Habrá casos en que sea necesario combinar la
información de varias relaciones. El producto cartesiano multiplica dos relacio-
nes, definiendo una nueva relación que tiene todos los pares posibles de tuplas
de las dos relaciones. Si la relación R tiene p tuplas y n atributos y la relación
S tiene q tuplas y m atributos, la relación resultado tendrá p∗q tuplas y n+m
atributos. Ya que es posible que haya atributos con el mismo nombre en las
dos relaciones, el nombre de la relación se antepondrá al del atributo en este
caso para que los nombres de los atributos sigan siendo únicos en la relación
resultado.
Una vez realizado el producto cartesiano de dos relaciones, se puede realizar
una restricción que elimine aquellas tuplas cuya información no esté relaciona-
da, como se muestra en el siguiente ejemplo.
Ejemplo 3.5 Obtener los nombres de las poblaciones en las que hay clientes.
Expresión del álgebra relacional que obtiene los datos especificados:
(CLIENTES[codpue] TIMES PUEBLOS)
WHERE CLIENTES.codpue = PUEBLOS.codpue


La combinación del producto cartesiano y la restricción del modo en que
se acaba de realizar, se puede reducir a la operación de concatenación (JOIN)
que se presenta más adelante.

Se dice que dos relaciones son compatibles para la unión si ambas tienen
la misma cabecera, es decir, si tienen el mismo número de atributos y éstos
se encuentran definidos sobre los mismos dominios en ambas tablas respecti-
vamente. En muchas ocasiones será necesario realizar proyecciones para hacer
que dos relaciones sean compatibles para la unión.
Ejemplo 3.6 Obtener un listado de los códigos de las poblaciones donde hay
clientes o vendedores.
Expresión del álgebra relacional que obtiene los datos especificados:
CLIENTES[codpue] UNION VENDEDORES[codpue]
Resultado:

Diferencia: R EXCEPT S
La diferencia obtiene una relación que tiene las tuplas que se encuentran en R y no se encuentran en S. Para realizar esta operación, R y
S deben ser compatibles para la unión.

Ejemplo 3.7 Obtener un listado de las poblaciones en donde hay clientes y
no hay vendedores.
Expresión del álgebra relacional que obtiene los datos especificados:

CLIENTES[codpue] EXCEPT VENDEDORES[codpue]
Resultado:

Concatenación (Join): R JOIN S
La concatenación de dos relaciones R y S obtiene como resultado
una relación cuyas tuplas son todas las tuplas de R concatenadas
con todas las tuplas de S que en los atributos comunes (aquellos que se llaman igual) tienen los mismos valores. Estos atributos comunes
aparecen una sola vez en el resultado.

Ejemplo 3.8 Obtener los datos de las poblaciones en las que hay clientes.
Expresión del álgebra relacional que obtiene los datos especificados:
CLIENTES[codpue] JOIN PUEBLOS
Esta expresión obtiene el mismo resultado que la expresión final del ejemplo 3.5, ya que la operación de concatenación es, en realidad, un producto
cartesiano y una restricción de igualdad sobre los atributos comunes.
Concatenación externa (Outer-join): R LEFT OUTER JOIN S
La concatenación externa por la izquierda es una concatenación en la
que las tuplas de R (que se encuentra a la izquierda en la expresión)
que no tienen valores en común con ninguna tupla de S, también
aparecen en el resultado.

Ejemplo 3.9 Obtener un listado de todos los clientes (código y nombre) y las
facturas que se les han realizado. Si no tienen facturas también deben aparecer
en el resultado.
Expresión del álgebra relacional que obtiene los datos especificados:
CLIENTES[codcli,nombre] LEFT OUTER JOIN FACTURAS
Resultado:

La expresión S RIGHT OUTER JOIN R es equivalente a R LEFT OUTER JOIN
S. Cuando en ambas relaciones hay tuplas que no se pueden concatenar y se
desea que en el resultado aparezcan también todas estas tuplas (tanto las de
una relación como las de la otra), se puede utilizar la concatenación externa
completa: R FULL OUTER JOIN S.
Intersección: R INTERSECT S
La intersección obtiene como resultado una relación que contiene
las tuplas de R que también se encuentran en S. Para realizar esta
operación, R y S deben ser compatibles para la unión.
La intersección se puede expresar en términos de diferencias:
R INTERSECT S = R EXCEPT (R EXCEPT S)
División: R DIVIDE BY S
Suponiendo que la cabecera de R es el conjunto de atributos A y que
la cabecera de S es el conjunto de atributos B, tales que B es un
subconjunto de A, y si C = A - B (los atributos de R que no están en
S), la división obtiene una relación cuya cabecera es el conjunto de
atributos C y que contiene las tuplas de R que están acompañadas de
todas las tuplas de S.
Ejemplo 3.10 Obtener clientes que han realizado compras a todos los vendedores.
Expresión del álgebra relacional que obtiene los datos especificados:
FACTURAS[codcli,codven] DIVIDE BY VENDEDORES[codven]
Además de las operaciones que Codd incluyó en el álgebra relacional, otros
autores han aportado otras operaciones para dar más potencia al lenguaje. Es
de especial interés la agrupación (también denominada resumen) que añade
capacidad computacional al álgebra.
Agrupación: SUMMARIZE R GROUP BY(ai,...,ak) ADD cálculo AS
atributo
Esta operación agrupa las tuplas de R que tienen los mismos valores
en los atributos especificados y realiza un cálculo sobre los grupos
obtenidos. La relación resultado tiene como cabecera los atributos
por los que se ha agrupado y el cálculo realizado, al que se da el
nombre especificado en atributo.
Los cálculos que se pueden realizar sobre los grupos de filas son: suma
de los valores de un atributo (SUM(ap)), media de los valores de un atributo
(AVG(ap)), máximo y mínimo de los valores de un atributo (MAX(ap), MIN(ap))
y número de tuplas en el grupo (COUNT(*)). La relación resultado tendrá tantas
filas como grupos se hayan obtenido.

Ejemplo 3.11 Obtener el número de artículos (unidades en total) de cada
factura.
Expresión del álgebra relacional que obtiene los datos especificados:
SUMMARIZE LÍNEAS_FAC GROUP BY(codfac)
ADD SUM(cant) AS cant_total
Resultado:
3.3 Cálculo Relacional

No hay comentarios:

Publicar un comentario