Algebra Relacional
Un algebra es un sistema matematico constituido por
• Operandos: objetos (valores o variables) desde los cualesnuevos objetos pueden ser construidos.
• Operadores: sımbolos que denotan nuevos objetos desdeobjetos dados.
El algebra relacional es un algebra en la cual
• Sus operandos son relaciones (instancias) o variables querepresentan relaciones.
• Sus operadores estan disenados para hacer la tareas mascomunes que se necesitan para manipular relaciones en unabase de datos.
El resultado es que el algebra relacional se puede utilizarcomo un lenguaje de consulta.
En la practica el algebra relacional debe ser extendida paraabarcar la mayor parte de las tareas reales que se hacen conlos datos.
Estudiaremos en detalle los operadores clasicos.
1
Tablas
Estas seran las tablas que usaremos en la mayorıa de ejemplos
Empleado
nombre sueldo cod dept fecha ing
Torres $ 1.200.000 A1 01/01/2004Soto $ 500.000 A2 01/01/2003Perez $ 300.000 A2 01/10/2003
Figueroa $ 600.000 A1 01/03/2002Salas $ 1.500.000 A1 01/01/2002Rıos $ 2.000.000 A3 01/06/2002
Campos $ 800.000 A2 01/11/2003Venegas $ 600.000 A1 01/06/2002Carcamo $ 500.000 A2 01/04/2003Gonzalez $ 2.000.000 A3 01/10/2002
Departamento
nombre cod dept fecha creac
Informatica A1 01/03/2002Marketing A2 01/01/2002Ventas A3 01/01/2001
Recursos Humanos A4 01/01/2003
Seleccion
Operador de seleccion σ, selecciona un subconjunto de lastuplas de una relacion.
Tuplas seleccionadas son las que satisfacen cierto predicadologico P . El predicado puede depender de los atributos de larelacion y de valores constantes.
El operador σ toma una relacion como argumento y el re-sultado es una nueva relacion.
Sintaxis:
σP(r)
Seleccionar los datos del empleado Soto:
σnombre=Soto(empleado)
nombre sueldo cod dept fecha ing
Soto $ 500.000 A2 01/01/2003
Los datos de los empleados con sueldo ≥ $500.000 que in-gresaron despues del 2003:
σsueldo≥500000 ∧ fech ing≥1/1/2003(empleado)
nombre sueldo cod dept fecha ing
Soto $ 500.000 A2 01/01/2003Campos $ 800.000 A2 01/11/2003Carcamo $ 500.000 A2 01/04/2003Torres $ 1.200.000 A1 01/01/2004
2
Proyeccion
Operador de proyeccion π, proyecta una relacion sobre unsubconjunto de sus atributos.
El operador π toma una relacion como argumento y el re-sultado es una nueva relacion.
Sintaxis: πA(r)donde A representa el conjunto de atributos sobre los que
la relacion r se proyectara.
Ejemplo: obtener los nombres de los distintos departamentos
πnombre(departamento)
nombre
InformaticaMarketingVentas
Recursos Humanos
Obtener los montos de sueldo de los empleados:
πsueldo(empleado)
sueldo
$ 1.200.000$ 500.000$ 300.000$ 600.000
$ 1.500.000$ 2.000.000$ 800.000
se eliminan los repetidos! una relacion es un conjunto.
3
Composicion de Operaciones
El resultado de cada operacion es una nueva relacion ⇒ sepueden aplicar operadores a los resultados de aplicacionesprevias.
Por ejemplo:
πA(σP(r))σP(πA(r))
σP1(σP2
(r))
Obtener los nombres de los empleados que ganan mas de$1.000.000.
πnombre(σsueldo>1000000(empleado))
nombre
TorresSalasRıos
Gonzalez
Obtener el sueldo y la fecha de ingreso de Soto:
πsueldo,fech ing(σnombre=Soto(empleado))
sueldo fecha ing
$ 500.000 01/01/2003
4
Union
Dado que las relaciones son conjuntos de tuplas, se puedenrealizar las operaciones usuales de conjuntos como la union.
Sintaxis: usamos notacion infija
r1 ∪ r2
Se deben hacer ciertas restricciones para realizar la union:
• Ambas relaciones deben tener el mismo numero de atrib-utos.
• El dominio del atributo i-esimo de cada relacion debe co-incidir.
Obtener los nombres de los empleados que ganan mas de$1.500.000 o que trabajan en el departamento con codigoA1.
πnombre(σsueldo>1500000(empleado)∪ σcod dept=A1(empleado))
nombre
TorresFigueroa
SalasRıos
VenegasGonzalez
5
Diferencia
Tambien se puede usar la diferencia de conjuntos, las tuplasque estan en una relacion pero no en la otra.
Sintaxis: usamos notacion infija
r1 − r2
Para poder realizar la diferencia se deben cumplir las mismasrestricciones que para la union
Ejemplo:
πnombre(alumno) −πnombre(σcarrera=Bioinformatica(alumno))
Resulta en una relacion que contiene a todos los nombres delos alumnos excepto de los alumnos de la carrera de Bioin-formatica.
6
Producto Cartesiano
Representa al producto cartesiano usual de conjuntos.
Combina tuplas de cualquieras dos (o mas) relaciones, hacela combinacion de todos con todos.
Si las relaciones a operar tienen N y M tuplas de n y mcomponentes respectivamente, la relacion resultante del elproducto cartesiano tiene N × M tuplas de n + m compo-nentes.
Sintaxis: usamos notacion infija
r1 × r2
No hay restricciones a los dominios de las relaciones similaresa las anteriores operaciones.
Nos permite reunir datos de dos relaciones distintas.
Cuidado con los nombres repetidos! se deben renombrar cier-tos atributos para no tener porblemas.
departamento× departamentonombre cd fec creac nombre cd fec creac
Informatica A1 01/03/2002 Informatica A1 01/03/2002Informatica A1 01/03/2002 Marketing A2 01/01/2002Informatica A1 01/03/2002 Ventas A3 01/01/2001Informatica A1 01/03/2002 Rec. Hum. A4 01/01/2003Marketing A2 01/01/2002 Informatica A1 01/03/2002Marketing A2 01/01/2002 Marketing A2 01/01/2002Marketing A2 01/01/2002 Ventas A3 01/01/2001Marketing A2 01/01/2002 Rec. Hum. A4 01/01/2003Ventas A3 01/01/2001 Informatica A1 01/03/2002Ventas A3 01/01/2001 Marketing A2 01/01/2002Ventas A3 01/01/2001 Ventas A3 01/01/2001Ventas A3 01/01/2001 Rec. Hum. A4 01/01/2003
Rec. Hum. A4 01/01/2003 Informatica A1 01/03/2002Rec. Hum. A4 01/01/2003 Marketing A2 01/01/2002Rec. Hum. A4 01/01/2003 Ventas A3 01/01/2001Rec. Hum. A4 01/01/2003 Rec. Hum. A4 01/01/2003
7
Producto Cartesiano: Ejemplos
Obtener el nombre del departamento en el que Soto trabaja:Primero hacemos la union cartesiana igualando un atributo
σdepto.cod depto=emp.cod depto(empleado× departamento)
Ahora podemos hacer la seleccion y proyeccion
πdepto.nombre(σemp.nombre=Soto
(σdepto.cod depto=emp.cod depto(empleado× departamento)))
departamento.nombre
Marketing
8
Renombre
A veces necesitamos obtener informacion uniendo datos dela misma tabla.
Por ejemplo, obtener los nombres de todos los empleadosque ingresaron despues que Soto a la empresa.
Primer intento:
empleado× (σnombre=Soto(empleado))
¿Como nos referimos a una u otra instancia de la tablaempleado?
El operador de renombre ρ soluciona el problema.
El operador ρ toma una relacion y entrega la misma relacionpero con otro nombre, podemos referirnos a distintas instan-cias de la misma relacion.
Sintaxis:ρx(r)
Volviendo al ejemplo, obtener los nombres de todos los em-pleados que ingresaron despues que Soto a la empresa, se-gundo intento:
empleado× (σnombre=Soto(ρempleado2(empleado))
Ahora podemos hacer:
πempleado.nombre(σempleado.fecha ing>empleado2.fecha ing
(empleado× (σnombre=Soto(ρempleado2(empleado))))
9
Formalizacion y Notacion de Arbol
El algebra relacional es un lenguaje de expresiones. Todaexpresion se puede generar a partir de las siguientes reglas:
• Toda relacion de la base de datos es una expresion.
• Si E1 y E2 son expresiones entonces las siguientes tambienson expresiones:
◦ E1 ∪ E2
◦ E1 − E2
◦ E1 × E2
◦ σP(E1) donde P es un predicado con atributos de E1
◦ πA(E1) donde A es una lista de atributos de E1
◦ ρx(E1) donde x es el nuevo nombre de la relacion E1.
Cada expresion generada por las reglas anteriores tiene comoresultado una relacion.
Toda relacion resultado de una expresion en el algebra rela-cional se puede ver como un arbol donde cada nodo internoesta etiquetado por una operacion:
• Las hojas son relaciones efectivas de la base de datos.
• La relacion representada por un arbol es la relacion queresulta de aplicar la operacion etiquetada en su raız a lasrelacion representadas por cada uno de los subarboles hijos.
Por ejemplo la relacion resultante de
πdepto.nombre(σemp.nombre=Soto
(σdepto.cod depto=emp.cod depto(empleado× departamento)))
Esta representada por el siguiente arbol (en la pizarra...)
A veces es mas comodo representar expresiones extensas us-ando arboles.
10
Operaciones Adicionales, Interseccion
Las operaciones anteriores son suficientes para definir todael algebra relacional.
Algunas consultas habituales son complejas de realizar concombinaciones de operaciones simples, usamos algunos op-eradores adicionales.
Interseccion
La interseccion usual de conjuntos.
Sintaxis: usamos notacion infija
r1 ∩ r2
Se deben cumplir las mismas restricciones que en la union ydiferencia, los atributos de la relaciones involucradas debentener los mismos dominios.
La interseccion se puede crear a partir de la diferencia:
r1 ∩ r2 = r1 − (r1 − r2)
Ejemplo:
πnombre(alumno preg) ∩πnombre(alumno posg)
resulta en una relacion que contiene los nombres de todoslos alumnos que son simultaneamente de pre y posgrado.
11
Reunion Natural(Join)
Hace un producto cartesiano de sus dos argumentos y realizauna seleccion forzando la igualdad de atributos que aparecenen ambas relaciones.
Elimina repetidos (como toda operacion de conjuntos).
Sintaxis: r1 ⋊⋉ r2
Ejemplo: listar todos los empleados y el nombre del departa-mento en el que trabajan
πemp.nombre,dept.nombre(empleado ⋊⋉ departamento)
empleado.nombre departamento.nombre
Torres InformaticaSoto MarketingPerez Marketing
Figueroa InformaticaSalas InformaticaRıos Ventas
Campos MarketingVenegas InformaticaCarcamo MarketingGonzalez Ventas
12
Join en General
Un forma mas general de hacer Join es especificando unapropiedad de reunion.
Se hace entonces un producto cartesiano de las dos rela-ciones y se realiza una seleccion forzando una propiedad masgeneral que la igualdad de atributos que aparecen en ambasrelaciones.
Sintaxis: r1 ⋊⋉P r2donde P es la propiedad de reunion.
Ejemplo: listar todos los pares de nombres de empleados ydepartamentos tales que el empleado ingreso a la empresaen una fecha anterior a la de creacion del departamento
πemp.nombre,depto.nombre(empleado ⋊⋉(fecha ing<fecha creac) departamento)
13
Relaciones Temporales
A veces las consultas se hacen muy extensas.
Una forma de simplificarlas es usando relaciones temporalesy asignandoles expresiones para usar despues:
r ← E asigna la expresion de algebra relaciones E a la nuevarelacion r.
Ejemplo:
temp← σsueldo>500000(empleado ⋊⋉ departamento)
πempleado.nombre,departamento.nombre(temp)
El ultimo resultado son los nombres de empleados y el depar-tamento en el que trabajan tales que el sueldo del empleadoes mayor a $500.000.
14
Calculo Relacional de Tuplas
El calculo relacional de tuplas es un lenguaje no procedural.
Con el algebra relacional damos un procedimiento para unaexpresion.
πA1,B1(σA1=v(rA ⋊⋉ rB))
En el calculo relacional de tuplas especificamos la informaciondeseada sin dar un procedimiento para obtenerla.
{t|P (t)}
Este ultimo conjunto representa a la relacion de todas lastuplas t que cumplen la propiedad logica P .
Supongamos que necesitamos solo los nombres de los em-pleados que tienen sueldo mayor a $500.000.
En algebra relacional usamos el operador π para obtenersolo los nombres. En el calculo relacional de tuplas debemosusar la construccion existe “∃”:
∃ t ∈ r(Q(t))
que significa: “existe una tupla t en la relacion r que cumpleel predicado Q(t)”.
Ejemplo: obtener los nombres de los empleados que tienensueldo mayor a $500.000.
{t | ∃s ∈ empleado (t[nombre] = s[nombre]∧ s[sueldo] > 500000)}
Se lee: “el conjunto de todas las tuplas tales que existe unatupla s en la relacion empleado para la cual los valores de ty s son iguales en el atributo nombre y el valor de s en elatributo sueldo es mayor que 500000”.
La variable de tupla t se define solo en el atributo nombre, esel unico atributo no cuantificado. El resultado es una relacioncon solo un atributo.
15
Calculo Relacional de Tuplas: Ejemplos
Supongamos que necesitamos los datos de todos los emplea-dos del departamento de Marketing y no sabemos el codigodel departamento.
En algebra relacional usamos el operador ⋊⋉ para obtener losdatos de ambas tablas.
En el calculo relacional de tuplas debemos usar tambien laconstruccion existe:
{t | t ∈ empleado ∧ ∃s ∈ departamento (s[cod depto] =t[cod depto] ∧ s[nombre] = marketing)}
Se lee: “el conjunto de todas las tuplas t de la relacionempleado tales que existe una tupla s en la relacion departamentopara la cual los valores de t y s son iguales en el atributocod depto y el valor de s en el atributo nombre es marketing”.
¿Como expresamos consultas del tipo “los nombres de todoslos alumnos que no son de bioinformatica, suponiendo quecontamos con las relaciones alumno y alumno bioinformatica?
Necesitamos el operador logico de negacion “¬”.
{t | ∃s ∈ alumno (s[nombre] = t[nombre])∧ ¬∃u ∈ alumno bioinformatica (u[nombre] = t[nombre])}
Se lee: “el conjunto de todas las tuplas t tales que existeuna tupla s en la relacion alumno que comparte el atrib-uto nombre con t y NO existe una tupla u en la relacionalumno bioinformatica que comparta el atributo nombre cont”.
16
Calculo Relacional de Tuplas: Ejemplos (cont.)
En general podemos usar “casi” cualquier expresion logicapara seleccionar tuplas.
Podemos usar las construcciones para todo “∀”, implica que
“⇒”, etc.
{t | ∃s ∈ depatamento (s[nombre] = t[nombre] ∧∀u ∈ empleado (u[cod depto] = s[cod depto]⇒ u[sueldo] >
500000))}
Se lee: “el conjunto de todas las tuplas t tales que, existeuna tupla s en la relacion departamento con la que comparteel atributo nombre y que para toda tupla u en la relacionempleado, si u comparte el atributo cod depto con s entoncesel valor del atributo sueldo de u es mayor que 500000.
En este conjunto estan los nombres de los departamentoscuyos empleados tienen todos un sueldo mayor a $500.000.¿Como hacemos esta consulta en algebra relacional?
¿Por que “casi” todas las expresiones logicas? ¿Que resultade la siguiente consulta?
{t | ¬(t ∈ empleado)}
¡Resulta una relacion con un numero infinito de tuplas!¡Tuplas que ni siquiera se encuentran en nuestra base dedatos!
No aceptamos entonces este tipo de consultas, aceptamossolo consultas seguras.
Una consulta {t | P (t)} es segura si el resultado son valoresque pertenecen a dom(P ), donde dom(P ) es la union de losdominios de todas las relaciones que aparecen en P .
{t | ¬(t ∈ empleado)} no es segura{t | t ∈ alumno ∧ ¬(t ∈ alumno bioinformatica)} si es segura.
17
Calculo Relacional de Dominios
Es un lenguaje de consulta sobre el modelo relacional noprocedural.
A diferencia del calculo relacional de tuplas, consulta acercavalores del dominio de los atributos de las relaciones, no delas tuplas de estas.
Una consulta en calculo relacional de dominios es de la sigu-iente forma:
{< x1, x2, . . . , xn > | P (x1, x2, . . . , xn)}
donde x1, x2, . . . , xn se llaman variables de dominio y P es unaformula proposicional sobre las variables del dominio.
Ejemplo: Obtener el nombre, el codigo y la fecha de creacionde los departamentos creados despues del 2003
{< a, b, c > | < a, b, c >∈ departamento ∧ c > 1/1/2003}
Ejemplo: Obtener el nombre de los empleados que ganan$800.000
{< n > | ∃a, b, c (< n, a, b, c >∈ empleado ∧ a = 800000)}
Ejemplo: Obtener los nombres de los empleados y de losdepartamentos en los que trabajan
{< e, d > | ∃a, b, c, f (< e, a, b, c >∈ empleado ∧
< d, b, f >∈ departamento}
A veces es mas simple representar consultas para atributosespecıficos en el calculo de dominios que en el calculo detuplas.
Tambien existe una nocion muy similar de consultas seguras
en el calculo de tuplas. Las consultas que se salen del dominiono son seguras.
18
Algebra vs Calculo Relacional
El calculo relacional nos entrega dos lenguajes de consultaen una base de datos bajo el modelo relacional.
A veces se hace mucho mas “natural” expresar consultas enun lenguaje de calculo relacional que con el algebra relacional.
Ventaja: se expresa “lo que se quiere” sin necesitar explicarcomo obtenerlo (sin especificar un procedimiento).
Resultado muy importante:
El algebra relacional, el calculo relacional de tuplas y el
calculo relacional de dominios tienen el mismo poder
expresivo ⇒ pueden responder el mismo tipo
de consultas en una base de datos relacional.
Interesante porque el calculo relacional esta basado en logicade primer orden que tiene mucha teorıa estudiada.
Con logica podemos demostrar que ciertas consultas no sepueden lograr con solo Algebra Relacional.
El ejemplo canonico de consulta que no se puede realizar esla clausura transitiva.
• Relacion de vuelos con numero indefinido de escalas
• Relacion de ancestros
Otro ejemplo no realizable, contar: determinar si la cantidadde tuplas de una relacion es par
19
Modificacion de la Base de Datos
Hasta ahora hemos visto como obtener informacion desde laBase de Datos.
Es necesario entregar herramientas para poder alterar el es-tado de la Base de Datos.
Eliminacion, Insercion, Actualizacion son algunas de las tar-eas necesarias, usaremos el algebra relacional.
Eliminacion
Usamos el operador de diferencia (−) y asignacion (←)
r ← r − E
donde r es una relacion y E una expresion del algebra rela-cional.
Eliminar los datos de Soto
empleado← empleado−σnombre=Soto(empleado)
Eliminar todos los empleados del departamento de Marketing
r1 ←σdep.nombre=Marketing(empleado ⋊⋉ departamento)r2 ←πemp.nombre,sueldo,emp.cod depto,fech ing(r1)empleado← empleado− r2
nombre sueldo cod dept fecha ing
Torres $ 1.200.000 A1 01/01/2004Figueroa $ 600.000 A1 01/03/2002
Salas $ 1.500.000 A1 01/01/2002Rıos $ 2.000.000 A3 01/06/2002
Venegas $ 600.000 A1 01/06/2002Gonzalez $ 2.000.000 A3 01/10/2002
20
Modificacion de la Base de Datos (cont.)
Insercion
Usamos el operador de union
r ← r ∪ E
donde r es una relacion y E una expresion del algebra rela-cional.
Agregar el departamento de Finanzas con codigo A5 y fechade creacion 5/8/2004
departamento← departamento ∪ {(Finanzas,A5,5/8/2004)}
nombre cod dept fecha creac
Informatica A1 01/03/2002Marketing A2 01/01/2002Ventas A3 01/01/2001
Recursos Humanos A4 01/01/2003Finanzas A5 05/08/2004
Actualizacion
A veces queremos cambiar el valor de algun atributo de unatupla sin cambiarla entera. Podrıa hacerse una eliminacion einsercion, pero resulta engorrosos muchas veces.
Usamos un nuevo operador δ (no reasignamos!):
δA←E(r)
que representa el hecho de cambiar el atributo A por la ex-presion matematica E en la relacion r.
Subir el sueldo de todos los empleados en %10 si su sueldoactual es mayor que $1.000.000 y en %20 si es menor
δsueldo←sueldo∗1,1(σsueldo≥1000000(empleado))δsueldo←sueldo∗1,2(σsueldo<1000000(empleado))
21
Cuidado con el orden!!!
nombre sueldo cod dept fecha ing
Torres $ 1.320.000 A1 01/01/2004Soto $ 600.000 A2 01/01/2003Perez $ 360.000 A2 01/10/2003
Figueroa $ 720.000 A1 01/03/2002Salas $ 1.650.000 A1 01/01/2002Rıos $ 2.200.000 A3 01/06/2002
Campos $ 960.000 A2 01/11/2003Venegas $ 720.000 A1 01/06/2002Carcamo $ 600.000 A2 01/04/2003Gonzalez $ 2.200.000 A3 01/10/2002