´
Algebra Relacional
Un ´algebra es un sistema matem´atico constituido por
• Operandos: objetos (valores o variables) desde los cuales
nuevos objetos pueden ser construidos.
• Operadores: s´ımbolos que denotan nuevos objetos desde
objetos dados.
El ´algebra relacional es un ´algebra en la cual
• Sus operandos son relaciones (instancias) o variables que
representan relaciones.
• Sus operadores est´an dise˜nados para hacer la tareas m´as
comunes que se necesitan para manipular relaciones en una base de datos.
El resultado es que el ´algebra relacional se puede utilizar como un lenguaje de consulta.
En la pr´actica el ´algebra relacional debe ser extendida para abarcar la mayor parte de las tareas reales que se hacen con los datos.
Tablas
Estas ser´an las tablas que usaremos en la mayor´ıa de ejemplos
Empleado
nombre sueldo cod dept f echa ing
Torres $ 1.200.000 A1 01/01/2004
Soto $ 500.000 A2 01/01/2003
P´erez $ 300.000 A2 01/10/2003 Figueroa $ 600.000 A1 01/03/2002 Salas $ 1.500.000 A1 01/01/2002 R´ıos $ 2.000.000 A3 01/06/2002
Campos $ 800.000 A2 01/11/2003
Venegas $ 600.000 A1 01/06/2002
Carcamo $ 500.000 A2 01/04/2003
Gonzalez $ 2.000.000 A3 01/10/2002
Departamento
nombre cod dept f echa creac
Inform´atica A1 01/03/2002
Marketing A2 01/01/2002
Ventas A3 01/01/2001
Selecci´
on
Operador de selecci´on
σ
, selecciona un subconjunto de las tuplas de una relaci´on.Tuplas seleccionadas son las que satisfacen cierto predicado l´ogico P. El predicado puede depender de los atributos de la relaci´on y de valores constantes.
El operador
σ
toma una relaci´on como argumento y el re-sultado es una nueva relaci´on.Sintaxis:
σ
P(r)Seleccionar los datos del empleado Soto:
σ
nombre=Soto(empleado)nombre sueldo cod dept f echa 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∧f ech ing≥1/1/2003(empleado)nombre sueldo cod dept f echa ing
Soto $ 500.000 A2 01/01/2003
Campos $ 800.000 A2 01/11/2003
Carcamo $ 500.000 A2 01/04/2003
Proyecci´
on
Operador de proyecci´on
π
, proyecta una relaci´on sobre un subconjunto de sus atributos.El operador
π
toma una relaci´on como argumento y el re-sultado es una nueva relaci´on.Sintaxis:
π
A
(
r
)
donde A representa el conjunto de atributos sobre los que la relaci´on r se proyectar´a.
Ejemplo: obtener los nombres de los distintos departamentos
π
nombre(departamento)nombre Inform´atica
Marketing Ventas
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
Composici´
on de Operaciones
El resultado de cada operaci´on es una nueva relaci´on ⇒ se pueden aplicar operadores a los resultados de aplicaciones previas.
Por ejemplo:
π
A
(
σ
P
(
r
))
σ
P
(
π
A
(
r
))
σ
P
1(
σ
P
2(
r
))
Obtener los nombres de los empleados que ganan m´as de $1.000.000.
π
nombre(σ
sueldo>1000000(empleado))nombre
Torres Salas
R´ıos Gonzalez
Obtener el sueldo y la fecha de ingreso de Soto:
π
sueldo,f ech ing(σ
nombre=Soto(empleado))sueldo f echa ing
Uni´
on
Dado que las relaciones son conjuntos de tuplas, se pueden realizar las operaciones usuales de conjuntos como la uni´on.
Sintaxis: usamos notaci´on infija
r
1
∪
r
2
Se deben hacer ciertas restricciones para realizar la uni´on:
• Ambas relaciones deben tener el mismo n´umero de
atrib-utos.
• El dominio del atributo i-´esimo de cada relaci´on debe
co-incidir.
Obtener los nombres de los empleados que ganan mas de $1.500.000 o que trabajan en el departamento con c´odigo A1.
π
nombre(σ
sueldo>1500000(empleado)∪
σ
cod dept=A1(empleado))nombre
Torres Figueroa
Diferencia
Tambi´en se puede usar la diferencia de conjuntos, las tuplas que est´an en una relaci´on pero no en la otra.
Sintaxis: usamos notaci´on infija
r
1
−
r
2
Para poder realizar la diferencia se deben cumplir las mismas restricciones que para la uni´on
Ejemplo:
π
nombre(alumno) −π
nombre(σ
carrera=Bioinformatica(alumno))Producto Cartesiano
Representa al producto cartesiano usual de conjuntos.
Combina tuplas de cualquieras dos (o m´as) relaciones, hace la combinaci´on de todos con todos.
Si las relaciones a operar tienen N y M tuplas de n y m
componentes respectivamente, la relaci´on resultante del el producto cartesiano tiene N × M tuplas de n + m compo-nentes.
Sintaxis: usamos notaci´on infija
r
1
×
r
2
No hay restricciones a los dominios de las relaciones similares a las anteriores operaciones.
Nos permite reunir datos de dos relaciones distintas.
Cuidado con los nombres repetidos! se deben renombrar cier-tos atribucier-tos para no tener porblemas.
departamento× departamento
Producto Cartesiano: Ejemplos
Obtener el nombre del departamento en el que Soto trabaja: Primero hacemos la uni´on cartesiana igualando un atributo
σ
depto.cod depto=emp.cod depto(empleado × departamento)Ahora podemos hacer la selecci´on y proyecci´on
π
depto.nombre(σ
emp.nombre=Soto(
σ
depto.cod depto=emp.cod depto(empleado × departamento)))departamento.nombre
Renombre
A veces necesitamos obtener informaci´on uniendo datos de la misma tabla.
Por ejemplo, obtener los nombres de todos los empleados que ingresaron despu´es que Soto a la empresa.
Primer intento:
empleado × (
σ
nombre=Soto(empleado))¿C´omo nos referimos a una u otra instancia de la tabla
empleado?
El operador de renombre
ρ
soluciona el problema.El operador
ρ
toma una relaci´on y entrega la misma relaci´on pero con otro nombre, podemos referirnos a distintas instan-cias de la misma relaci´on.Sintaxis:
ρ
x
(
r
)
Volviendo al ejemplo, obtener los nombres de todos los em-pleados que ingresaron despu´es que Soto a la empresa, se-gundo intento:
empleado × (
σ
nombre=Soto(ρ
empleado2(empleado))Ahora podemos hacer:
π
empleado.nombre(σ
empleado.f echa ing>empleado2.f echa ingFormalizaci´
on y Notaci´
on de ´
Arbol
El ´algebra relacional es un lenguaje de expresiones. Toda expresi´on se puede generar a partir de las siguientes reglas:
• Toda relaci´on de la base de datos es una expresi´on.
• Si E1 y E2 son expresiones entonces las siguientes tambi´en
son 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 relaci´on E1.Cada expresi´on generada por las reglas anteriores tiene como resultado una relaci´on.
Toda relaci´on resultado de una expresi´on en el ´algebra rela-cional se puede ver como un ´arbol donde cada nodo interno est´a etiquetado por una operaci´on:
• Las hojas son relaciones efectivas de la base de datos. • La relaci´on representada por un ´arbol es la relaci´on que
resulta de aplicar la operaci´on etiquetada en su ra´ız a las relaci´on representadas por cada uno de los sub´arboles hijos.
Por ejemplo la relaci´on resultante de
π
depto.nombre(σ
emp.nombre=Soto(
σ
depto.cod depto=emp.cod depto(empleado × departamento)))Est´a representada por el siguiente ´arbol (en la pizarra...)
————————————————-Operaciones Adicionales, Intersecci´
on
Las operaciones anteriores son suficientes para definir toda el algebra relacional.
Algunas consultas habituales son complejas de realizar con combinaciones de operaciones simples, usamos algunos op-eradores adicionales.
Intersecci´on
La intersecci´on usual de conjuntos.
Sintaxis: usamos notaci´on infija
r
1
∩
r
2
Se deben cumplir las mismas restricciones que en la uni´on y diferencia, los atributos de la relaciones involucradas deben tener los mismos dominios.
La intersecci´on se puede crear a partir de la diferencia:
r
1
∩
r
2
=
r
1
−
(
r
1
−
r
2
)
Ejemplo:
π
nombre(alumno preg) ∩π
nombre(alumno posg)Reuni´
on Natural(Join)
Hace un producto cartesiano de sus dos argumentos y realiza una selecci´on forzando la igualdad de atributos que aparecen en ambas relaciones.
Elimina repetidos (como toda operaci´on de conjuntos).
Sintaxis:
r
1
⋊
⋉
r
2
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 Inform´atica Soto Marketing P´erez Marketing Figueroa Inform´atica
Join en General
Un forma m´as general de hacer Join es especificando una
propiedad de reuni´on.
Se hace entonces un producto cartesiano de las dos rela-ciones y se realiza una selecci´on forzando una propiedad m´as general que la igualdad de atributos que aparecen en ambas relaciones.
Sintaxis:
r
1
⋉
⋊
P
r
2
donde P es la propiedad de reuni´on.
Ejemplo: listar todos los pares de nombres de empleados y departamentos tales que el empleado ingres´o a la empresa en una fecha anterior a la de creaci´on del departamento
π
emp.nombre,depto.nombre(Relaciones Temporales
A veces las consultas se hacen muy extensas.
Una forma de simplificarlas es usando relaciones temporales y asign´andoles expresiones para usar despu´es:
r ← E asigna la expresi´on de ´algebra relaciones E a la nueva relaci´on r.
Ejemplo:
temp ← σsueldo>500000(empleado ⋊⋉ departamento)
πempleado.nombre,departamento.nombre(temp)
C´
alculo Relacional de Tuplas
El c´alculo relacional de tuplas es un lenguaje no procedural.
Con el ´algebra relacional damos un procedimiento para una expresi´on.
πA1,B1(σA1=v(rA ⋊⋉ rB))
En el c´alculo relacional de tuplas especificamos la informaci´on deseada sin dar un procedimiento para obtenerla.
{t|P(t)}
Este ´ultimo conjunto representa a la relaci´on de todas las tuplas t que cumplen la propiedad l´ogica P.
Supongamos que necesitamos s´olo los nombres de los em-pleados que tienen sueldo mayor a $500.000.
En ´algebra relacional usamos el operador
π
para obtener s´olo los nombres. En el c´alculo relacional de tuplas debemos usar la construcci´on existe “∃”:∃ t ∈ r(Q(t))
que significa: “existe una tupla t en la relaci´on r que cumple el predicado Q(t)”.
Ejemplo: obtener los nombres de los empleados que tienen sueldo 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 una tupla s en la relaci´on empleado para la cual los valores de t
y s son iguales en el atributo nombre y el valor de s en el atributo sueldo es mayor que 500000”.
C´
alculo Relacional de Tuplas: Ejemplos
Supongamos que necesitamos los datos de todos los emplea-dos del departamento de Marketing y no sabemos el c´odigo del departamento.
En ´algebra relacional usamos el operador ⋊⋉ para obtener los datos de ambas tablas.
En el c´alculo relacional de tuplas debemos usar tambi´en la construcci´on 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 relaci´on
empleado tales que existe una tupla s en la relaci´on departamento
para la cual los valores de t y s son iguales en el atributo
cod depto y el valor de s en el atributo nombre es marketing”.
¿C´omo expresamos consultas del tipo “los nombres de todos los alumnos que no son de bioinform´atica, suponiendo que contamos con las relaciones alumno y alumno bioinf ormatica?
Necesitamos el operador l´ogico de negaci´on “¬”.
{t | ∃s ∈ alumno (s[nombre] = t[nombre])
∧ ¬∃u ∈ alumno bioinf ormatica (u[nombre] = t[nombre])}
Se lee: “el conjunto de todas las tuplas t tales que existe una tupla s en la relaci´on alumno que comparte el atrib-uto nombre con t y NO existe una tupla u en la relaci´on
alumno bioinf ormatica que comparta el atributo nombre con
C´
alculo Relacional de Tuplas: Ejemplos (cont.)
En general podemos usar “casi” cualquier expresi´on l´ogica para 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, existe una tupla s en la relaci´on departamento con la que comparte el atributo nombre y que para toda tupla u en la relaci´on empleado, si u comparte el atributo cod depto con s entonces el valor del atributo sueldo de u es mayor que 500000.
En este conjunto est´an los nombres de los departamentos cuyos empleados tienen todos un sueldo mayor a $500.000. ¿C´omo hacemos esta consulta en ´algebra relacional?
¿Por qu´e “casi” todas las expresiones l´ogicas? ¿Qu´e resulta de la siguiente consulta?
{t | ¬(t ∈ empleado)}
¡Resulta una relaci´on con un n´umero infinito de tuplas!
¡Tuplas que ni siquiera se encuentran en nuestra base de datos!
No aceptamos entonces este tipo de consultas, aceptamos s´olo consultas seguras.
Una consulta {t | P(t)} es segura si el resultado son valores que pertenecen a dom(P), donde dom(P) es la uni´on de los dominios de todas las relaciones que aparecen en P.
{t | ¬(t ∈ empleado)} no es segura
C´
alculo Relacional de Dominios
Es un lenguaje de consulta sobre el modelo relacional no procedural.
A diferencia del c´alculo relacional de tuplas, consulta acerca valores del dominio de los atributos de las relaciones, no de las tuplas de ´estas.
Una consulta en c´alculo relacional de dominios es de la sigu-iente forma:
{< x1, x2, . . . , xn > | P(x1, x2, . . . , xn)}
d´onde x1, x2, . . . , xn se llaman variables de dominio y P es una
f´ormula proposicional sobre las variables del dominio.
Ejemplo: Obtener el nombre, el c´odigo y la fecha de creaci´on de los departamentos creados despu´es 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 los departamentos en los que trabajan
{< e, d > | ∃a, b, c, f (< e, a, b, c >∈ empleado ∧
< d, b, f >∈ departamento}
A veces es m´as simple representar consultas para atributos espec´ıficos en el c´alculo de dominios que en el c´alculo de tuplas.
Tambi´en existe una noci´on muy similar de consultas seguras
´
Algebra vs C´
alculo Relacional
El c´alculo relacional nos entrega dos lenguajes de consulta en una base de datos bajo el modelo relacional.
A veces se hace mucho m´as “natural” expresar consultas en un lenguaje de c´alculo relacional que con el ´algebra relacional.
Ventaja: se expresa “lo que se quiere” sin necesitar explicar c´omo obtenerlo (sin especificar un procedimiento).
Resultado muy importante:
El ´algebra relacional, el c´alculo relacional de tuplas y el c´alculo relacional de dominios tienen el mismo poder
expresivo ⇒ pueden responder el mismo tipo de consultas en una base de datos relacional.
Interesante porque el c´alculo relacional est´a basado en l´ogica de primer orden que tiene mucha teor´ıa estudiada.
Con l´ogica podemos demostrar que ciertas consultas no se pueden lograr con s´olo ´Algebra Relacional.
El ejemplo can´onico de consulta que no se puede realizar es la clausura transitiva.
• Relaci´on de vuelos con n´umero indefinido de escalas • Relaci´on de ancestros
Modificaci´
on de la Base de Datos
Hasta ahora hemos visto como obtener informaci´on desde la Base de Datos.
Es necesario entregar herramientas para poder alterar el es-tado de la Base de Datos.
Eliminaci´on, Inserci´on, Actualizaci´on son algunas de las tar-eas necesarias, usaremos el ´algebra relacional.
Eliminaci´on
Usamos el operador de diferencia (−) y asignaci´on (←)
r ← r − E
donde r es una relaci´on y E una expresi´on 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,f ech ing(r1)empleado ← empleado − r2
nombre sueldo cod dept f echa ing
Modificaci´
on de la Base de Datos (cont.)
Inserci´on
Usamos el operador de uni´on
r ← r ∪E
donde r es una relaci´on y E una expresi´on del ´algebra rela-cional.
Agregar el departamento de Finanzas con c´odigo A5 y fecha de creaci´on 5/8/2004
departamento ← departamento∪ {(Finanzas,A5,5/8/2004)}
nombre cod dept f echa creac
Inform´atica A1 01/03/2002 Marketing A2 01/01/2002 Ventas A3 01/01/2001 Recursos Humanos A4 01/01/2003 Finanzas A5 05/08/2004
Actualizaci´on
A veces queremos cambiar el valor de alg´un atributo de una tupla sin cambiarla entera. Podr´ıa hacerse una eliminaci´on e inserci´on, 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-presi´on matem´atica E en la relaci´on r.
Subir el sueldo de todos los empleados en %10 si su sueldo actual es mayor que $1.000.000 y en %20 si es menor
Cuidado con el orden!!!
nombre sueldo cod dept f echa ing