Вы находитесь на странице: 1из 7

CALCULO RELACIONAL

Propuesto por Codd en 1971 como alternativa al álgebra. La diferencia fundamental es


que en el lenguaje algebraico hay que especificar qué operadores hay que aplicar a las
relaciones para obtener el resultado, mientras que en el cálculo sólo es preciso indicar
cuál es el resultado que se quiere obtener.

Los lenguajes basados en el cálculo relacional son descriptivos, mientras que los
algebraicos son prescriptivos.

Los lenguajes de cálculo relacional pueden ser de dos tipos:

 Orientados a tuplas; en los que una variable se interperta como si representase


las tuplas de una relación.
 Orientados a dominios; en los que una variable se interperta como si
representase los valores de un dominio.

CALCULO RELACIONAL ORIENTADO A TUPLAS

Una consulta obedece al siguiente esquema:

[Definición de las variables de tupa

Operador + Objetivo + Predicado

Definición de las variables de tupa

Para definir la o las variables de tupla que necesitaremos debemos hacerlo de la


siguiente forma:

RANGE OF T IS X1, X2, …, Xn

T nombre de la variable de tupla


X1 nombre de una relación cualquiera o de una expresión de cálculo de tuplas
encerrado entre paréntesis.

Si X1, X2, …, Xn son relaciones deben ser compatibles respecto la unión (tener
idénticas cabeceras).
Una variable de tupla se mueve sobre la relación o relaciones y en un determinado
momento representa indistintamente una tupla cualquiera de la relación especificada.
Sobre una misma relación es posible definir más de una variable de tupla.
En una misma expresión pueden intervenir varias variables de tupas referidas a la
misma o a distintas relaciones.
Una ocurrencia de variable es ligada (acotada) si sobre ella actúa un cuantificador
(EXISTS, FORALL) o está dentro del alcance de un cuantificador, que actúa sobre la
misma variable. Cualquier otra ocurrencia que no cumpla lo anterior es libre.
Operador

Determinará la acción que hay que realizar con los datos seleccionados (recuperación,
inserción, borrado o modificación ). En el cálculo relacional puro se suele omitir al
tratarse siempre de una consulta.

Objetivo (lista objetivo)

Especifica qué atributos de qué relaciones se desea recuperar.


Si en la lista de atributos aparecen relaciones distintas, se realiza el producto cartesiano
de las correspondientes relaciones, y se aplica la restricción contenida en el predicado, y
después la proyección sobre los atributos de la lista.
Es necesario cualificar los atributos, es decir, dar el nombre de la relación (o de la
variable de tupla) seguido de un punto y del nombre del atributo.
Ejemplo:
R1.A1, R1.An, R2.B1, R2.B2... Lista de atributos de varias relaciones o de varibles
de tupla.
R1, R2 Nombres de relaciones o variables de tupla.
A1, A2, B1, B3 Atributos de las relaciones. Algún Ai puede coincidir con algun
Bj, si así fuera sería preciso cambiar el nombre de los atributos de la siguiente forma:
X= R2.B1 donde X es el nuevo nombre para el atributo B1 en la relación resultado.
Esto es obligatorio en caso de repeticiones y opcional en los otros caos.
Si sólo se especifica el nombre de la relación o variable de tupla constituirá una
abreviatura de todos los atributos de la relación o variable de tupla.

Ejemplos 

SX.S#
SNUM=SX.S#, SP.S#
SX.S#, SX.CIUDAD, SPX.P#

Predicado
Especifica la condición que deben verificar las tuplas a fin de ser seleccionadas, y se
construye con la ayuda de los símbolos visuales del cáculo de predicados.
Debe ser una fórmula bien formada (fbf):
 Las variables se asocian a las tuplas.
 Las constantes se asocian a los valores de los dominios subyacentes a los
atributos.
 Los operadores son los permitidos de comparación (<.< =, >,>=, =, <>), los
lógicos ( NOT, AND, OR), así como los cuantificadores existencial (EXISTS) y
universal (FORALL).
EXPRESIONES

Objetivo [ WHERE fbf ]

Fórmula bien formada

::= comparación
NOT fbf
Comparación AND fbf
Comparación OR fbf
IF comparación THEN fbf
EXISTS variable (fbf)
FORALL variable (fbf)

Ejemplo:
Para estos ejemplos se suponen definidas las variabes de tuplas SX y SPX:

RANGE OF SX IS S
RANGE OF SPX IS SP

SX.X
SX.S# WHERE SX.CIUDAD = ‘Londres’
SSUM=SX.S# WHERE SX.CIUDAD = ‘Londres’
SX.S#, SX.CIUDAD WHERE EXISTS SPX (SPX.S# = SX.S# AND SPX.P# = ‘P2’)

EVALUACIÓN DE LAS FBF

Si F y G son dos fbf entonces:

F G NOT F F AND G F OR G IF F THEN G = NOT F OR G


V V F V V V
V F F F V F
F V V F V V
F F V F F V

EL CUANTIFICADOR EXISTENCIAL (EXISTS)

Se usa para indicar que existe una tupla de un tipo particular en una relación.

Es equivalente a la función de reunión ( join del álgebra relacional)


Ejemplo:
Mostrar las ciudades desde las que se suministran partes al proveedor S2.

RANGE OF PX IS P
RANGE OF SPX IS SP
PX.CIUDAD WHERE EXISTS SPX ( SPX.P# = PX.P# AND SPX.S# = ‘S2’)

Objetivo variable comparación comparación

fbf

fbf

“Si para cada tupla dada de PX existe una tupla en SPX tal que SPX.P# = PX.P# y
SPX.S# = ‘S2’, entonces PX.CIUDAD es incluida en la relación solución”

EL CUANTIFICADOR UNIVERSAL (FORALL)

Indica que una condición se aplica a todas o a cada tupla de algún tipo ( es equivalente a
la operación de división en el álgebra relacional)

Ejemplo:
Mostrar todos los campos de los proveedores que suministran todas las partes.

RANGE OF SX IS S
RANGE OF SPX IS SP
RANGE OF PX IS P

SX WHERE FORALL PX ( EXISTS SPX (SPX.S# = SX.S# AND


SPX.P# = PX.P# ))

Objetivo variables comparaciones

fbf

fbf

AMPLICACIONES DEL CALCULO

Funciones de agregados: Agregado (expresión, atributo)

 Agregado es COUNT (cuenta) , SUM (suma) , AVG (promedio), MAX


(maximo) o MIN (mínimo).
 Expresión es una expresión del cálculo de tuplas ( su resultado es una relación)
 Atributo es el atributo de la relación resultado al cual debe aplicarse el operador
agregación.

La función IS_NULL ( argumento)

 Verdadero si el resultado de evaluar su argumento es nulo.


 Falso en caso contrario.

Operador LIKE ( como )

 Ejemplo LIKE ‘Londres’


 Comodines: “ –“ un carácter “ % ” cadena de caracteres.

ALGUNOS EJEMPLOS

Basados en la base de datos de piezas envíos y proveedores:

PROVEEDORES S (S#, SNOMBRE, SITUACIÓN, CIUDAD)

ENVIOS SP (S#, P#, CANT)

PIEZAS P (P#, PNOMBRE, COLOR, PESO, CIUDAD)

Estas son las soluciones comentadas de los 8 primeros ejercicios propuestos.

Supondremos para los ejercicios las siguientes definiciones de variables de tuplas:

RANGE OF SX IS S RANGE OF PX IS P RANGE OF SPX IS SP


RANGE OF SY IS S RANGE OF PY IS P RANGE OF SPY IS SP
RANGE OF SZ IS S RANGE OF PZ IS P RANGE OF SPZ IS SP

1. Obtener los números de los proveedores de París cuya situación sea mayor que 20.

SX.S# WHERE SX.CIUDAD=’París’ AND SX.SITUACIÓN > 20

2. Obtener todas las parejas de números de proveedor tales que los proveedores estén
en la misma ciudad.

PRIMEROS# = SX.S# , SEGUNDOS# = SY.S#

WHERE SX.CIUDAD= SY.CIUDAD AND SX.S# < SY.S#

3. Obtener los nombres de los proveedores que suministran la parte P2.

SX.NOMBRE WHERE EXISTS SPX ( SPX.S# = SX.S# AND SPX.P# =’P2’)


4. Obtener los nombres de los proveedores que subministran por lo menos una parte
roja.

SX.NOMBRE WHERE EXISTS SPX ( SX.S# = SPX.S# AND

EXISTS PX (SPX.P# =PX.P# AND PX.COLOR = ‘Rojo’))

En forma normal prémex ( todos los cuantificadores aparecen antes de la fbf)

SX.NOMBRE WHERE EXISTS SPX ( EXISTS PX (SX.S# = SPX.S# AND

SPX.P# =PX.P# AND PX.COLOR = ‘Rojo’))

5. Obtener los números de los proveedores que subministran al menos una parte
subministrada por el proveedor S2.

SX.NOMBRE WHERE EXISTS SPX ( EXISTS SPY (SX.S# = SPX.S# AND

SPX.P# =SPY.P# AND SPY.S# = ‘S2’))

6. Obtener los nombres de los proveedores que subministran todas las partes.

SX.NOMBRE WHERE FORALL PX ( EXISTS SPX (SPX.S# = SX.S# AND

SPX.P# =PX.P#’))

Sin usar FORALL...

SX.NOMBRE WHERE NOT EXISTS PX ( NOT EXISTS SPX (SPX.S# = SX.S#

AND SPX.P# =PX.P#’))

7. Obtener los nombres de los proveedores que no subministran la parte P2.

SX.NOMBRE WHERE NOT EXISTS SPX ( SPX.S# = SX.S# AND

SPX.P# = ’P2’))

8. Obtener los números de los proveedores que subministran al menos todas las partes
subministradas por el proveedor S2.

SPX.S# WHERE FORALL SPY ( SPY.S# < > ‘S2’ OR EXISTS SPZ

( SPZ.S# = SPX.S# AND SPZ.P# = SPY.P#))

Convención sintáctica para simplificación: IF f THEN g  ( NOT f ) OR g

La consulta anterior se puede expresar como...

SPX.S# WHERE FORALL SPY ( IF SPY.S# = ‘S2’ THEN EXISTS SPZ


( SPZ.S# = SPX.S# AND SPZ.P# = SPY.P#))

Вам также может понравиться