You are on page 1of 12

Modelo Relacional: Manipulacin de los datos.

54

4. Modelo Relacional: Manipulacin de los datos.


4.1. Lenguaje de procedimiento: lgebra relacional Los lenguajes de procedimientos para consultar bases de datos relacionales estn basados en el lgebra relacional. El lgebra relacional consta de un conjunto de operadores de alto nivel que operan sobre las relaciones. Los operandos de cada operacin pueden ser una o ms relaciones y como resultado dan una nueva relacin. La relacin resultado se puede someter a nuevas operaciones. Codd defini ocho operadores de este tipo en dos grupos de cuatro: Operaciones tradicionales de conjunto: Unin, interseccin, diferencia y producto cartesiano. Operaciones relacionales especiales: Proyeccin, restriccin (seleccin), reunin y divisin.

Todos los ejemplos de operaciones se realizarn sobre las siguientes relaciones, que representan datos de PROVEEDORES en las relaciones PROVl y PROV2, datos de ARTCULOS en la relacin ART y datos de PRECIOS en la relacin PREC. Esta ltima contiene, para cada proveedor, la relacin de los artculos que suministra junto con su precio. NIF NOMBRE 1111 Manuel 3333 Gabriel 5555 Marco 7777 Carlos a) Relacin PROV1 LOCALIDAD Mlaga Granada Mlaga Cdiz NIF NOMBRE 2222 Antonio 3333 Gabriel 5555 Marco b) Relacin PROV2 LOCALIDAD Almera Granada Mlaga

CODIGO CONCEPTO 11 Teclado 22 Impresora c) Relacin ART

COD-ART NIF-PRO 11 1111 22 3333 11 7777 d) Relacin PREC

PRECIO 16,00 250,00 15,00

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

55

4.1.1. Operaciones tradicionales de conjunto Las operaciones con conjuntos son operaciones binarias; es decir, a partir de dos relaciones se obtiene una tercera. operacin UNION

La unin de dos relaciones R y S con el mismo esquema o cabecera, es una relacin T con el mismo esquema formada por el conjunto de todas las tuplas que pertenecen a R o a S, o a ambas relaciones. Sin tuplas duplicadas. La unin se denota por: T := R UNION S La figura siguiente muestra la relacin unin de PROVl y PROV2. NIF NOMBRE LOCALIDAD 1111 Manuel Mlaga 2222 Antonio Almera 3333 Gabriel Granada 5555 Marco Mlaga 7777 Carlos Cdiz PROV1 UNION PROV2 Observa que las tuplas con NIF 3333 y 5555 no aparecen por duplicado. Operacin DIFERENCIA

La diferencia de dos relaciones R y S con el mismo esquema, es una relacin T, con el mismo esquema formada por el conjunto de todas las tuplas que pertenecen a R y no a S. La diferencia se expresa: T := R MENOS S La figura siguiente muestra la relacin diferencia de PROVl menos PROV2. NIF 1111 7777 PROV1 NOMBRE LOCALIDAD Manuel Mlaga Carlos Cdiz MENOS PROV2

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

56

Operador INTERSECCION

La interseccin de dos relaciones R y S con el mismo esquema, es una relacin T con el mismo esquema que contiene las tuplas que pertenecen a R y a S a la vez. La notacin utilizada es: T := R INTERSECT S La figura siguiente es el resultado de la interseccin de las relaciones PROV1 y PROV2. NIF NOMBRE LOCALIDAD 3333 Gabriel Granada 5555 Marco Mlaga PROV1 INTERSECT PROV2 La interseccin tambin puede conseguirse a partir de la diferencia mediante la expresin: R INTERSECT S = R MENOS (R MENOS S) Operacin PRODUCTO CARTESIANO

El producto cartesiano de dos relaciones R y S con un esquema cualquiera, es una relacin T que tiene por atributos la concatenacin de los de R y S, cuyas tuplas son todas las concatenaciones de una tupla de R a una tupla de S. Es decir la relacin T contiene todas las combinaciones posibles de tuplas entre R y S. El producto cartesiano se escribe de la forma: T := R TIMES S La figura siguiente representa un producto cartesiano de PROV2 y ART. NIF 2222 2222 3333 3333 5555 5555 PROV2 NOMBRE LOCALIDAD CODIGO Antonio Almera 11 Antonio Almera 22 Gabriel Granada 11 Gabriel Granada 22 Marco Mlaga 11 Marco Mlaga 22 TIMES ART CONCEPTO Teclado Impresora Teclado Impresora Teclado Impresora

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

57

4.1.2. Operaciones relacionales especiales Operacin PROYECCIN

El operador de proyeccin (PROJECT) selecciona ciertas columnas de la relacin original y elimina las tuplas duplicadas. La operacin PROJECT se denota: R[X,Y,Z], que se lee: Proyeccin de la relacin R sobre los atributos X,Y,Z. La figura siguiente representa la proyeccin de la relacin PROV1 a partir del atributo LOCALIDAD. LOCALIDAD Mlaga Granada Cdiz PROV1[LOCALIDAD] Observa como Mlaga aparece slo una vez. Operacin SELECCIN

La seleccin (SELECT) de la relacin R, de acuerdo con la condicin Q, es otra relacin con el mismo esquema, en la que sus tuplas son las de R, que cumplen la condicin Q. Restringe la relacin slo a las tuplas que satisfagan una condicin, de hecho, RESTRINGIR fue el nombre original de esta operacin, pero actualmente se conoce como SELECCIONAR (SELECT), que no debemos confundir con la proposicin SELECT de SQL, que veremos posteriormente. La operacin SELECT utiliza la notacin: R WHERE condicin La figura siguiente representa la seleccin en la relacin PROVl cuando LOCALIDAD = Mlaga. NIF 1111 5555 PROV1 NOMBRE LOCALIDAD Manuel Mlaga Marco Mlaga WHERE LOCALIDAD= Mlaga

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

58

Operacin REUNION

El operador de reunin, tambin llamado unin-j o de yuncin (JOIN), toma dos relaciones R y S que tengan en comn uno o ms atributos y crea una nueva relacin T concatenando las tuplas que tengan el mismo valor en el atributo especificado. Aunque no es frecuente, podemos realizar reuniones en las que no se exija que los valores sean iguales, pudiendo ser mayor que, menor que, etc. Esta operacin se escribe: JOIN(R,S/condicin) La figura siguiente representa la reunin de la relacin PROV1 con la relacin PREC cuando el NIF de PROVl coincide con el atributo NIF-PRO de PREC. NIF NOMBRE LOCALIDAD COD-ART 1111 Manuel Mlaga 11 3333 Gabriel Granada 22 7777 Carlos Cdiz 11 JOIN(PROV1,PREC/NIF=NIF-PROV) La unin presenta varios casos particulares: Equirreunin: Cuando el operador de comparacin toma el valor igual que. Es el caso del ejemplo anterior. Reunin o producto natural: Es el tipo de reunin ms interesante. Equivale a la equirreunin, pero adems se suprimen los atributos iguales. Se representa por: R JOIN S Si las relaciones no tienen ningn atributo en comn, entonces la reunin natural coincide con el producto cartesiano: R TIMES S = R JOIN S La figura siguiente representa la reunin natural de la relacin PROV1 con la relacin PREC cuando el NIF de PROVl coincide con el atributo NIF-PRO de PREC. Observa que no aparece duplicado el atributo NIF. NIF 1111 3333 7777 PROV1 NOMBRE LOCALIDAD Manuel Mlaga Gabriel Granada Carlos Cdiz JOIN PREC COD-ART 11 22 11 PRECIO 16,00 250,00 15,00 NIF-PRO 1111 3333 7777 PRECIO 16,00 250,00 15,00

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

59

Operador DIVISION

Sean R y S dos relaciones de m+n y n atributos, respectivamente; es decir, los atributos n son comunes a las dos relaciones. (Si vas a seguir leyendo: Agrrate fuerte a la silla) La divisin de R entre S es una relacin con los atributos m que contiene todos los valores de m en R cuyos valores de n incluyen a todos los valores de n en S. Dicho de otro modo (no te sueltes): se define la divisin entre R y S como el conjunto de todas las tuplas de m atributos, tales que al concatenarlas con todas las tuplas de S siempre producen tuplas contenidas en R.(ya te puedes soltar) Admite las notaciones: T := R DIVIDIDO S Las siguientes figuras representan ejemplos de divisin de la relacin ART-PROV (es una proyeccin de PREC) entre la relacin DVSOR. COD-ART NIF-PRO 11 1111 22 3333 11 7777 ART-PROV COD-ART 11 DVSOR NIF-PRO 1111 7777 RESULTADO

La divisin escoge registros de la relacin R basndose en el rango de valores especificados en S. COD-ART NIF-PRO 11 1111 33 1111 22 3333 33 3333 11 5555 22 5555 11 7777 33 7777 ART-PROV COD-ART NIF-PRO 11 1111 22 1111 33 1111 22 3333 33 3333 11 5555 22 5555 11 7777 33 7777 ART-PROV COD-ART 11 33 DVSOR NIF-PRO 1111 7777 RESULTADO

COD-ART 11 22 33 DVSOR

NIF-PRO 1111 RESULTADO

Observa en este ltimo caso, que el divisor es una relacin de todos los cdigos de artculos conocidos, y el resultado muestra los proveedores que suministran todos los artculos. Como vers este operador resulta til para consultas de este tipo.

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

60

4.1.3. Operaciones bsicas del lgebra relacional Las cinco operaciones bsicas del lgebra relacional son: unin, diferencia, producto cartesiano, proyeccin y seleccin. Sin embargo, si se utilizan slo estas operaciones, algunas consultas resultan muy costosas. Por esta razn se definen operadores adicionales (reunin, interseccin y divisin), que no hacen ms potente al lgebra relacional pero s simplifican algunas operaciones de consulta, como por ejemplo la reunin natural. Algunos autores proponen nuevos operadores que proporcionan al lgebra la capacidad de clculo, ya que en la prctica resulta muy interesante. Por ejemplo: - Un operador que tome una relacin y genere otra con atributos cuyo valor se obtenga al operar con atributos de la relacin inicial. - Un operador que tome una relacin y genere otra que totalice el valor de ciertos atributos. 4.1.4. Ejemplos Obtener los nombres de proveedores cuya localidad es Mlaga.
(PROV WHERE LOCALIDAD=Mlaga) [NOMBRE]

Vemoslo en varios pasos: 1. Primero hacemos una SELECCIN en la relacin PROV de las tuplas cuya LOCALIDAD es Mlaga:
T:=PROV WHERE LOCALIDAD=Mlaga

2. Despus hacemos una PROYECCIN de la relacin resultante sobre el atributo NOMBRE:


T[NOMBRE]

Obtener los nombres de proveedores que suministren el artculo con cdigo 11


((PROV JOIN PREC) WHERE COD-ART=11)[NOMBRE]

Explicacin: Primero construimos la reunin natural de las relaciones PROV y PREC segn el NIF del proveedor, cuyo efecto es ampliar cada tupla PREC con la informacin del proveedor correspondiente (es decir, NOMBRE y LOCALIDAD). Posteriormente se seleccionan, en esa reunin, las tuplas cuyo cdigo de artculo es 11. Por ltimo, la seleccin se proyecta sobre el atributo NOMBRE. Quiz un modo ms eficiente consistira en realizar la seleccin antes de la reunin natural:
((PREC WHERE COD-ART=11) JOIN PROV)[NOMBRE]

Obtener los nombres de proveedores que suministren el artculo teclado


((ART JOIN PREC JOIN PROV) WHERE CONCEPTO=Teclado)[NOMBRE]

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

61

Otra solucin sera:


((ART WHERE CONCEPTO=Teclado) JOIN PREC JOIN PROV)[NOMBRE]

Obtener los nombre de los proveedores que suministran el artculo Teclado, junto con su precio.
((ART WHERE CONCEPTO=Teclado) JOIN PREC JOIN PROV)[NOMBRE,PRECIO]

Obtener los nombres de proveedores que suministran todos los artculos.


((PREC[COD-ART, NIF-PROV] DIVIDIDO PREC[COD-ART])JOIN PROV)[NOMBRE]

Obtener los nombres de proveedores que no suministran el cdigo 22


((PROV[NIF] MENOS (PREC WHERE COD-ART=22)[NIF-PROV])JOIN PROV)[NOMBRE]

Explicacin: restamos a la relacin con todos los NIFs de proveedores, los NIFs de los proveedores que s suministran el cdigo 22. La relacin resultante son los NIFs que no suministran el cdigo 22, haciendo la reunin natural con PROV obtenemos el resto de la informacin para cada proveedor. Por ltimo, proyectamos la relacin sobre el atributo NOMBRE.

4.2. Lenguaje sin procedimientos: clculo relacional. El clculo relacional se basa en una rama de la lgica matemtica llamada clculo de predicados. El concepto de clculo relacional (clculo de predicado aplicado a las bases de datos relacionales) fue propuesto por vez primera por Codd, adems propuso un lenguaje basado en ese clculo llamado sublenguaje de datos ALPHA. ALPHA nunca se llev a la prctica, pero el lenguaje QUEL de INGRES es muy parecido. Mediante este lenguaje el usuario expresa lo que desea obtener pero no cmo obtenerlo. Tanto el lgebra como el clculo relacional proporcionan una base para el estudio de la parte manipulativa del modelo relacional. La diferencia entre ellas es que el lgebra ofrece un conjunto de operaciones explcitas (reunin, unin, proyeccin, etc.) que puede servir en la prctica para indicar al sistema la forma de construir una relacin a partir de otras, y el clculo slo ofrece una notacin para definir la relacin deseada en trminos de otras relaciones. Segn lo que representen las variables utilizadas, el clculo relacional se puede clasificar en: 1. Clculo relacional de tuplas. 2. Clculo relacional de dominios. Ambos tipos son similares, y la diferencia fundamental radica en que las variables del primero representan tuplas y las del segundo representan dominios. Nosotros nos centraremos en el clculo relacional de tuplas.

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

62

4.2.1. Clculo relacional de tuplas Una expresin o consulta en el clculo relacional de tuplas tiene la forma {t / P(t)}, que se lee: El conjunto de todas las tuplas t tal que, el predicado P se cumple para t. El predicado especifica el criterio de seleccin para la recuperacin de los datos. Para construir los predicados hay que tener en cuenta los siguientes conceptos, (proponemos una sintaxis para poder desarrollar los ejemplos): Variable de tupla: Conocida tambin como variable de recorrido, es una variable que recorre una relacin, es decir, una variable cuyos nicos valores permitidos son tuplas de esa relacin. Las variables de tupla se declaran del siguiente modo: RANGO DE vble_tupla ES Relacin Por ejemplo: RANGO DE XPROV ES PROV

Se utiliza la notacin vble_tupla.atributo para denotar el valor de la vble_tupla en el atributo correspondiente. Por ejemplo: XPROV.NIF, XPROV.NOMBRE.

Condiciones de comparacin. Se utilizan en el predicado para comparar atributos de tuplas o tuplas enteras combinando variables y constantes con operadores de comparacin y aritmticos. El resultado de la comparacin puede tomar el valor verdadero, falso o nulo. Ejemplos: XPROV.NIF = 1111 XPROV.NOMBRE = Manuel XPREC.PRECIO > 1500

Condiciones compuestas Las condiciones compuestas se construyen combinando las condiciones de comparacin con los operadores lgicos: AND(y), OR(o) y NOT(no). Puede tomar los valores verdadero o falso. Por ejemplo: (XPREC.COD-ART = 22) AND (XPREC.PRECIO < 1500)

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

63

Cuantificador existencial Se utiliza para comprobar la existencia de una tupla en una relacin que cumpla determinada condicin. Toma el valor verdadero si hay algn valor de la vble_tupla que cumpla la condicin y falso en caso contrario. Su sintaxis es: EXISTE vble_tupla (condicin) que se lee: Existe una tupla vble_tupla tal que la condicin se cumple. Ejemplo:
EXISTE XPREC (XPREC.NIF-PROV=XPROV.NIF AND XPREC.COD-ART=22)

que puede leerse: Existe una tupla en PREC cuyo valor del atributo NIFPROV es igual al valor del atributo NIF de una tupla de PROV y el valor del atributo COD-ART es igual a 22. Cuantificador universal Se utiliza para comprobar si todas las tuplas en una relacin cumplen determinada condicin. Toma el valor verdadero si todos los valores de la vble_tupla cumplen la condicin y falso en caso contrario. Su sintaxis es: PARATODO vble_tupla (condicin) que se lee: Para todo valor de vble_tupla se cumple la condicin. Ejemplo:
PARATODO XPREC (XPREC.PRECIO<100)

que puede leerse: Para todas las tuplas de PREC el valor del atributo PRECIO es menor de 100. Dependiendo de si una variable de tupla est o no unida a un cuantificador (existencial o universal), se denomina: a) Variable libre: No est ligada a un cuantificador. b) Variable acotada o atada: Est unida a un cuantificador. 4.2.2. Ejemplos Obtener los nombres de proveedores cuya localidad es Mlaga. RANGO DE XPROV ES PROV {XPROV.NOMBRE / XPROV.LOCALIDAD = Mlaga}
Solucin utilizando el lgebra relacional: (PROV WHERE LOCALIDAD=Mlaga) [NOMBRE]

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

64

Vemoslo en varios pasos:


1. Primero declaramos la variable de tupla XPROV cuyo conjunto de valores est

dentro de la relacin PROV. 2. Despus tomamos el atributo NOMBRE de las tuplas de PROV, tales que su LOCALIDAD sea igual a Mlaga. Obtener los nombres de proveedores que suministren el artculo con cdigo 11 RANGO DE XPROV ES PROV RANGO DE XPREC ES PREC
{XPROV.NOMBRE / EXISTE XPREC (XPREC.NIF-PROV=XPROV.NIF AND XPREC.COD-ART= 11)}
Solucin utilizando el lgebra relacional: ((PREC WHERE COD-ART=11) JOIN PROV)[NOMBRE]

Explicacin: Tomamos el atributo NOMBRE de las tuplas de PROV tales que exista en la relacin PREC una tupla con NIF-PROV igual al NIF de una tupla de PROV y cuyo COD-ART sea igual a 11. Obtener los nombres de proveedores que suministren el artculo teclado
RANGO DE XPROV ES PROV RANGO DE XPREC ES PREC RANGO DE XART ES ART {XPROV.NOMBRE / EXISTE XPREC (XPREC.NIF-PROV=XPROV.NIF AND EXISTE XART (XART.CODIGO=XPREC.COD-ART AND XART.CONCEPTO=Teclado))}
Solucin utilizando el lgebra relacional: ((ART WHERE CONCEPTO=Teclado) JOIN PREC JOIN PROV)[NOMBRE]

Obtener los nombre de los proveedores que suministran el artculo Teclado, junto con su precio.
RANGO DE XPROV ES PROV RANGO DE XPREC ES PREC RANGO DE XART ES ART {XPROV.NOMBRE, XPREC.PRECIO / EXISTE XPREC (XPREC.NIF-PROV=XPROV.NIF AND EXISTE XART (XART.CODIGO=XPREC.COD-ART AND XART.CONCEPTO=Teclado))}
Solucin utilizando el lgebra relacional: ((ART WHERE CONCEPTO=Teclado) JOIN PREC JOIN PROV)[NOMBRE,PRECIO]

I.E.S. Bezmiliana

Modelo Relacional: Manipulacin de los datos.

65

Obtener los nombres de proveedores que suministran todos los artculos.


RANGO DE XPROV ES PROV RANGO DE XPREC ES PREC RANGO DE XART ES ART

{XPROV.NOMBRE / PARATODO XART (EXISTE XPREC(XPREC.COD-ART=XART.CODIGO AND XPREC.NIF-PROV=XPROV.NIF))}


Solucin utilizando el lgebra relacional: ((PREC[COD-ART, NIF-PROV] DIVIDIDO PREC[COD-ART])JOIN PROV)[NOMBRE]

Obtener los nombres de proveedores que no suministran el cdigo 22


RANGO DE XPROV ES PROV RANGO DE XPREC ES PREC RANGO DE XART ES ART

{XPROV.NOMBRE / NOT EXISTE XPREC(XPREC.NIF-PROV=XPROV.NIF AND XPREC.COD-ART= 22)}


Solucin utilizando el lgebra relacional: ((PROV[NIF] MENOS (PREC WHERE COD-ART=22)[NIF-PROV])JOIN PROV)[NOMBRE]

I.E.S. Bezmiliana

You might also like