Páginas

martes, 7 de enero de 2014

3.3 Cálculo relacional

3.3. Cálculo relacional
El álgebra relacional y el cálculo relacional son formalismos diferentes que
representan distintos estilos de expresión del manejo de datos en el ámbito del
modelo relacional. El álgebra relacional proporciona una serie de operaciones
que se pueden usar para indicar al sistema cómo construir la relación deseada
a partir de las relaciones de la base de datos. El cálculo relacional proporciona
una notación para formular la definición de la relación deseada en términos de
las relaciones de la base de datos.
El cálculo relacional toma su nombre del cálculo de predicados, que es una
rama de la lógica. Hay dos tipos de cálculo relacional, el orientado a tuplas,
propuesto por Codd, y el orientado a dominios, propuesto por otros autores.
El estudio del cálculo relacional se hará aquí mediante definiciones informales.
Las definiciones formales se pueden encontrar en la bibliografía.
En el cálculo de predicados (lógica de primer orden), un predicado es una
función con argumentos que se puede evaluar a verdadero o falso. Cuando los
argumentos se sustituyen por valores, la función lleva a una expresión deno-
minada proposición, que puede ser verdadera o falsa. Por ejemplo, las frases
«Paloma Poy es una vendedora de la empresa» y «Paloma Poy es jefa de Na-
talia Guillén» son proposiciones, ya que se puede determinar si son verdaderas
o falsas. En el primer caso, la función «es una vendedora de la empresa» tiene
un argumento (Paloma Poy) y en el segundo caso, la función «es jefa de» tiene
dos argumentos (Paloma Poy y Natalia Guillén).
Si un predicado tiene una variable, como en «x es una vendedora de la
empresa», esta variable debe tener un rango asociado. Cuando la variable se
sustituye por alguno de los valores de su rango, la proposición puede ser cierta;
para otros valores puede ser falsa. Por ejemplo, si el rango de x es el conjunto de
36
37
Mercedes Marqués - ISBN: 978-84-693-0146-3
Bases de datos - UJI
todas las personas y reemplazamos x por Paloma Poy, la proposición «Paloma
Poy es una vendedora de la empresa» es cierta. Pero si reemplazamos x por el
nombre de una persona que no es vendedora de la empresa, la proposición es
falsa.
Si F es un predicado, la siguiente expresión devuelve el conjunto de todos
los valores de x para los que F es cierto:
x WHERE F(x)
Los predicados se pueden conectar mediante AND, OR y NOT para formar
predicados compuestos.
3.3.1. Cálculo orientado a tuplas
En el cálculo relacional orientado a tuplas, lo que interesa es encontrar
tuplas para las que se cumple cierto predicado. El cálculo orientado a tuplas
se basa en el uso de variables tupla. Una variable tupla es una variable cuyo
rango de valores son las tuplas de una relación.
Por ejemplo, para especificar el rango de la variable tupla AX sobre la rela-
ción ARTÍCULOS se utiliza la siguiente expresión:
RANGE OF AX IS ARTÍCULOS
Para expresar la consulta «obtener todas las tuplas AX para las que F(AX) es
cierto», se escribe la siguiente expresión:
AX WHERE F(AX)
donde F es lo que se denomina una fórmula bien formada. Por ejemplo, para
expresar la consulta «obtener los datos de los artículos con un precio superior
a 10e» se puede escribir:
RANGE OF AX IS ARTÍCULOS
AX WHERE AX.precio > 10
AX.precio se refiere al valor del atributo precio para la tupla AX. Para que
se muestren solamente algunos atributos, por ejemplo, codart y descrip, en
lugar de todos los atributos de la relación, se deben especificar éstos en la lista
de objetivos:
RANGE OF AX IS ARTÍCULOS
AX.codart, AX.descrip WHERE AX.precio > 10
Hay dos cuantificadores que se utilizan en las fórmulas bien formadas para
indicar a cuántas instancias se aplica el predicado. El cuantificador existencial
∃ (existe) se utiliza en las fórmulas bien formadas que deben ser ciertas para
al menos una instancia.
37
38
Mercedes Marqués - ISBN: 978-84-693-0146-3
Bases de datos - UJI
RANGE OF CX IS CLIENTES
∃CX (CX.codcli = FX.codcli AND CX.codpostal = 12003)
Esta fórmula bien formada dice que «existe un cliente que tiene el mismo código
que el código de cliente de la tupla que ahora se encuentra en la variable de
FACTURAS, FX, y cuyo código postal es 12003». El cuantificador universal ∀
(para todo) se utiliza en las fórmulas bien formadas que deben ser ciertas para
todas las instancias.
RANGE OF VX IS VENDEDORES
∀VX (VX.codpue �= 37758)
Esta fórmula bien formada dice que «para todas las tuplas de VENDEDORES,
la población no es la del código 37758». Utilizando las reglas de las operacio-
nes lógicas, esta fórmula bien formada se puede escribir también del siguiente
modo:
NOT ∃PX (VX.codpue = 37758)
que dice que «no hay ningún vendedor cuya población sea la del código 37758».
Las variables tupla que no están cuantificadas por ∀ o ∃ se denominan va-
riables libres. Si están cuantificadas, se denominan variables ligadas. El cálculo,
al igual que cualquier lenguaje, tiene una sintaxis que permite construir expre-
siones válidas. Para que una expresión no sea ambigua y tenga sentido, debe
seguir esta sintaxis:
Si P es un predicado con n argumentos y t1,t2,...,tnson constantes o
variables, entonces P(t1,t2,...,tn) es una fórmula bien formada n-ária.
Si t1y t2son constantes o variables del mismo dominio y θ es un operador
de comparación (<,≤,>,≥,=,�=), entonces t1θt2 es una fórmula bien
formada.
Si P1y P2son fórmulas bien formadas, también lo son su conjunción P1
AND P2, su disyunción P1OR P2y la negación NOT P1. Además, si P
es una fórmula bien formada que tiene una variable libre X, entonces
∃X(P) y ∀X(P) también son fórmulas bien formadas.
Ejemplo 3.12 Obtener un listado de los clientes que tienen facturas con des-
cuento.
Esta petición se puede escribir en términos del cálculo: «un cliente debe salir
en el listado si existe alguna tupla en FACTURAS que tenga su código de cliente
y que tenga descuento (dto)».
RANGE OF CX IS CLIENTES
RANGE OF FX IS FACTURAS
CX WHERE ∃FX (FX.codcli = CX.codcli AND FX.dto > 0)
38
39
Mercedes Marqués - ISBN: 978-84-693-0146-3
Bases de datos - UJI
Nótese que formulando la consulta de este modo no se indica la estrategia
a seguir para ejecutarla, por lo que el sistema tiene libertad para decidir qué
operaciones hacer y en qué orden. En el álgebra relacional se hubiera formulado
así: «Hacer una restricción sobre FACTURAS para obtener las tuplas que tienen
descuento, y hacer después una concatenación con CLIENTES».
Ejemplo 3.13 Obtener los clientes que tienen descuento en todas sus factu-
ras.
RANGE OF CX IS CLIENTES
RANGE OF FX IS FACTURAS
CX WHERE ∀FX (FX.codcli �= CX.codcli OR FX.dto > 0)
La expresión anterior es equivalente a esta otra:
CX WHERE NOT ∃FX (FX.codcli = CX.codcli AND FX.dto ≤ 0)
Y también es equivalente a la siguiente:
CX WHERE ∀FX (IF FX.codcli = CX.codcli THEN FX.dto > 0)
ya que la expresión IF p THEN q es equivalente a la expresión NOT p OR q.
3.3.2. Cálculo orientado a dominios
En el cálculo relacional orientado a dominios las variables toman sus valores
en dominios, en lugar de tomar valores de tuplas de relaciones. Otra diferencia
con el cálculo orientado a tuplas es que en el cálculo orientado a dominios hay
un tipo de comparación adicional, a la que se denomina ser miembro de. Esta
condición tiene la forma:
R(a1:v1, a2:v2, ...)
donde los ai son atributos de la relación R y los vi son variables dominio o
constantes. La condición se evalúa a verdadero si existe alguna tupla en R que
tiene los valores especificados en los atributos especificados. Por ejemplo, la
siguiente condición:
VENDEDORES(codpostal:12003, codjefe:5)
se evaluará a verdadero si hay algún empleado con código postal 12003 y cuyo
jefe es el vendedor 5. Y la condición:
VENDEDORES(codpostal:cpx, codjefe:cjx)
será cierta si hay alguna tupla en VENDEDORES que tenga en codpostal el valor
actual de la variable dominio cpx y que tenga en codjefe el valor actual de la
variable dominio cjx.
Ejemplo 3.14 Obtener el nombre de los vendedores cuyo jefe no es el 5, y
cuyo código postal es 12003.
nmx WHERE ∃cjx ∃cpx (cjx �= 5 AND cpx = 12003
AND VENDEDORES(nombre:nmx, codjefe:cjx, codpostal:cpx))

4.4 Otros Lenguajes

No hay comentarios:

Publicar un comentario