Algebra Relacional Las operaciones fundamentales son: UNARIAS: Operan sobre una sola relación...
-
Upload
prospero-banez -
Category
Documents
-
view
254 -
download
0
Embed Size (px)
Transcript of Algebra Relacional Las operaciones fundamentales son: UNARIAS: Operan sobre una sola relación...

Algebra Relacional

Algebra RelacionalEs 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.D
EF
INIC
IÓN:
SELECCIÓN,
PROYECCIÓN
UNIÓN
DIFERENCIA DE CONJUNTOS
PRODUCTO CARTESIANO
RENOMBRAMIENTO
Las operaciones fundamentales son:
UNARIAS: Operan
sobre una sola relación
BINARIAS: Operan sobre pares de relaciones

Operaciones Fundamentales:SELECCIÓN
Selecciona tuplas que satisfacen un predicado dado. Se utiliza la letra griega sigma δ para denotarla. El predicado aparece como subíndice de δ. La relación del argumento se da entre paréntesis a continuación de δ.
EJM: Para seleccionar las tuplas de la relación PRESTAMO en que la sucursal es CARACAS hay que escribir:
δnombre –sucursal = << caracas>>( préstamo)

EJM: Se pueden buscar todas las tuplas en las que el importe sea mayor que 1200
δimporte> 1200( préstamo)
Se permiten comparaciones tales como: =, ≠, <,≤,>,≥, en el predicado de selección. Además se pueden combinar varios predicados en uno mayor utilizando los conectivos: y (٨) y o (٧).
EJM: Encontrar las tuplas correspondientes a préstamos de más de 1200 concedidos por la sucursal de Caracas.
δnombre –sucursal = << caracas>> ٨ importe> 1200( préstamo)

PROYECCIÓN
Devuelve su relación de argumentos, excluyendo algunos, dado que las relaciones son conjuntos se eliminan todas las filas duplicadas. Se denota con la letra griega mayúscula pi (Π).Se crea una lista de atributos que desea que aparezcan el resultado como subíndice de Π, la relación del argumento se escribe dentro del paréntesis.
EJM: Consulta para crear una lista de todos los números de préstamos y del importe.
Π número –prestamo,importe( préstamo)

También se pueden combinar a lo cual se le llama COMPOSICIÓN DE OPERACIONES RELACIONALES.
EJM: Encontrar los clientes que viven en Maracaibo. Π nombre –cliente(δciudad –cliente = << Maracaibo>> ( cliente))

UNIÓN
Consulta para unir información de tablas distintas. Se debe considerar: a) Las relaciones r y s deben tener el mismo número de atributos.b)Los dominios de los atributos deben ser iguales
EJM: Consulta para encontrar el nombre de todos los clientes del banco que tienen una cuenta, un préstamo o ambas cosas.
Π nombre –cliente (prestatario)U Π nombre –cliente (impostor)
Nombre de la entidadAtributos o nombre del campo

DIFERENCIA DE CONJUNTOS
Denotada por – permite buscar las tuplas que estén en una relación pero no en otras. Se deben realizar en relaciones compatibles (sigue las mismas reglas de la unión)
EJM: Buscar todos los clientes del banco que tienen abierta una cuenta pero no tienen concedido ningún préstamo.
Π nombre –cliente (impostor) -Π nombre –cliente (prestatario)

PRODUCTO CARTESIANO
Denotada por aspa (x) permite combinar información de dos relaciones cualquieras.
EJM: Consultar todos los nombres de todos los clientes que tienen concedido un préstamo en la sucursal de Caracas.
Π nombre –cliente ( δprestatario.numero-préstamo=préstamo.número-
prestamo(δnombre –sucursal = << caracas>> (prestatario x préstamo)))

RENOMBRAMIENTO
Los resultados de las expresiones del algebra relacional no tienen un nombre que se pueda utilizar para referirse a ellas, lo cual resulta útil. Este operador denotado por: rho minúscula (ρ) permite hacerlo.
EJM: Dada la expresión E seria: ρx(E). Lo cual devuelve el resultado con el nombre x

NroCli Nombre Fecha_Alta Saldo
1 Enrique 14/09/1996 100
2 Fernando 21/07/1998 -60
3 German 19/12/1994 500
4 Alejandro 02/01/1999 90
Se utilizará un ejemplo para ir presentando los operadores y su semántica. Supongamos la relación clientes:

Selección El primer operador que se va a presentar es la Selección σ. Este es un operador unario, por lo que toma como operando a una sola relación y su valor es cierto subconjunto de las tuplas de esa relación.
Por ejemplo, si queremos saber cuáles clientes tienen saldo positivo, la sentencia:
Resultado:
δ saldo>0(Clientes)
NroCli Nombre Fecha_Alta Saldo
1 Enrique 14/09/1996 100
3 German 19/12/1994 500
4 Alejandro 02/01/1999 90

Para determinar todas los clientes que se dieron de alta desde el año 1998 hasta la actualidad:
δ Fecha_Alta '01/01/1998'(Clientes)
NroCli Nombre Fecha_Alta Saldo
2 Fernando 21/07/1998 -60
4 Alejandro 02/01/1999 90
Resultado:

La condición puede se tan compleja como sea necesario, por ejemplo, lista los clientes que tienen saldo negativo y se han dado de alta durante el año 1998:
δ Saldo<0 ^ Fecha_Alta '01/01/1998' ^ Fecha_Alta '31/12/1998'(Clientes)
NroCli Nombre Fecha_Alta Saldo
2 Fernando 21/07/1998 -60

El operador σ podríamos definirlo de la siguiente manera: Sea Φ una fórmula booleana cuyos operandos son números de columna o constantes, combinados con los comparadores =, !=, <, >, ³, £, y los operadores lógicos Ù (conjunción),Ú (disyunción), y ~ (negación). Entonces δ Φ(R) se define como el conjunto de tuplas en R tales que la fórmula Φ es cierta si substituimos cada ocurrencia de un número de columna J por t[j].

Proyección • Así como la selección extrae un subconjunto de tuplas,
el próximo operador llamado proyección y denotado Õ extrae un subconjunto de las columnas. Por ejemplo, si queremos una lista de los distintos saldos que hay en las cuentas de nuestros clientes, la consulta Π saldo(Clientes) produce una relación cuya única columna es saldo y que contiene una tupla por cada valor distinto de saldo que aparece en clientes
Saldo
100
-60
500
90

• La siguiente consulta produce los pares de códigos Nombre, saldo:
Π nombre, saldo(Clientes)
Nombre Saldo
Enrique 100
Fernando -60
German 500
Alejandro 90

• Como el resultado de aplicar un operador algebraico es siempre una relación, es posible componer operadores, formando expresiones. Por ejemplo, la siguiente consulta nos dará los nombres de los clientes que tiene un saldo positivo:
Πnombre(δsaldo>0(Clientes))
Nombre
Enrique
German
Alejandro

Unión • Dado que una relación es un conjunto de tuplas,
podemos aplicar a dos relaciones las operaciones booleanas habituales aplicables a conjuntos. En particular, vamos a utilizar la union y la diferencia. Para ello crearemos dos relaciones, f_parciales, con fechas de exámenes parciales y f_finales, con fechas de exámenes finales:

Parciales
Materia Fecha
Logica 09/05/2001
Matemática 1 10/05/2001
Matemática 2 10/05/2001
Geometría 10/05/2001
Álgebra 10/05/2001
Datos I 11/05/2001
Datos II 11/05/2001
Programación I 11/05/2001
Programación II 12/05/2001
Compiladores 13/05/2001
Finales
Materia Fecha
Fisica 09/05/2001
Matemática 1 15/05/2001
Matemática 2 15/05/2001
Geometría 15/05/2001
Álgebra 15/05/2001
Datos I 16/05/2001
Datos II 16/05/2001
Programación I 16/05/2001
Programación II 17/05/2001
Compiladores 18/05/2001

• Si ahora necesitamos un listado de todas las materias, con sus fechas de exámenes, con la consulta:
f_parciales È f_finales
Materia Fecha
Logica 09/05/2001
Matemática 1 10/05/2001
Matemática 2 10/05/2001
Geometría 10/05/2001
Álgebra 10/05/2001
Datos I 11/05/2001
Datos II 11/05/2001
Programación I 11/05/2001
Programación II 12/05/2001
Compiladores 13/05/2001
Matemática 1 15/05/2001
Matemática 2 15/05/2001
Geometría 15/05/2001
Álgebra 15/05/2001
Datos I 16/05/2001
Datos II 16/05/2001
Programación I 16/05/2001
Programación II 17/05/2001
Compiladores 18/05/2001
Formalmente, si R y S son dos relaciones del mismo rango, R È S es el conjunto de tuplas que pertenecen a R o a S.

Diferencia
• La operación diferencia nos permite extraer tuplas qhe no satisfagan cierta propiedad. Por ejemplo, supongamos que queremos hallar las materias que tienen la fecha de parcial pero no la de final. Con la siguiente consulta:
Õmateria(f_parciales) - Õmateria (f_finales)
Obtendremos el resultado: Materia Fecha
Lógica 09/05/2001
Formalmente, si R y S son dos relaciones del mismo rango, R - S es el conjunto de todas las tuplas que pertenecen a R pero no a S. Notemos que la operación booleana de intersección de conjuntos se puede sintetizar usando la diferencia, mediante la identidad: R ∩ S = R - (R - S)donde R ∩ S denota todas tuplas que pertenecen a R y también a S.

Producto Cartesiano
• Hasta ahora no hemos visto ningún operador que nos permita tomar una tupla u extenderla agregándole información proveniente de otra tupla en otra relación. Esta es la función del producto cartesiano. Dadas dos relaciones R y S de rango r y s respectivamente, el producto cartesiano es una relación de rango r + s conteniendo todas las tuplas cuyas r primeras columnas formen una tupla que pertenece en R y cuyas s restantes columnas forman una tupla que pertenece a S. Si hacemos la siguiente consulta: R χ SObtendremos el siguiente resultado:

Materia Fecha Materia Fecha
Logica 09/05/2001 Fisica 09/05/2001
Logica 09/05/2001 Matemática 1 15/05/2001
Logica 09/05/2001 Matemática 2 15/05/2001
Logica 09/05/2001 Geometría 15/05/2001
Logica 09/05/2001 Álgebra 15/05/2001
Logica 09/05/2001 Datos I 16/05/2001
Logica 09/05/2001 Datos II 16/05/2001
Logica 09/05/2001 Programación I 16/05/2001
Logica 09/05/2001 Programación II 17/05/2001
Logica 09/05/2001 Compiladores 18/05/2001
Matemática 1 10/05/2001 Fisica 09/05/2001
Matemática 1 10/05/2001 Matemática 1 15/05/2001
Matemática 1 10/05/2001 Matemática 2 15/05/2001
Y sigue con el resto de las asignaturas…….

• En general, el resultado de un producto cartesiano no será de interés en sí mismo, sino que le aplicaremos
otros operadores para obtener la respuesta deseada. Por ejemplo, supongamos una consulta, en la cual
necesitemos listar, para cada materia, su fecha de parcial y su fecha de final:
Õf_parciales.Materia, f_parciales.fecha,
f_finales.fecha(σf_parciales.materia=f_finales.materia(f_parciales χ f_finales))
Materia Fecha Fecha
Matemática 1 10/05/2001 15/05/2001
Matemática 2 10/05/2001 15/05/2001
Geometría 10/05/2001 15/05/2001
Álgebra 10/05/2001 15/05/2001
Datos I 11/05/2001 16/05/2001
Datos II 11/05/2001 16/05/2001
Programación I 11/05/2001 16/05/2001
Programación II 12/05/2001 17/05/2001
Compiladores 13/05/2001 18/05/2001

EJERCICIO
1. Considere la siguiente base de datos relacional:Empleado(nombre-empleado, calle, ciudad)Trabaja(nombre-empleado, nombre-empresa, sueldo)Empresa(nombre-empleado, ciudad)Jefe(nombre-empleado, nombre-jefe).
Dese una expresión del algebra relacional para cadauna de las siguientes consultas:a) Encontrar la compañía con mayor número de
empleadosb) Encontrar la compañía con la nómina (suma de
sueldos de sus empleados)más reducida.c) Encontrar las compañías cuyos empleados ganen un
sueldo elevado.