Está en la página 1de 24

Algebra Relacional

Un lgebra es un sistema matemtico constituido por a a

Operandos: objetos (valores o variables) desde los cuales nuevos objetos pueden ser construidos. Operadores: s mbolos que denotan nuevos objetos desde objetos dados.
El lgebra relacional es un lgebra en la cual a a

Sus operandos son relaciones (instancias) o variables que representan relaciones. Sus operadores estn diseados para hacer la tareas ms a n a comunes que se necesitan para manipular relaciones en una base de datos.
El resultado es que el lgebra relacional se puede utilizar a como un lenguaje de consulta. En la prctica el lgebra relacional debe ser extendida para a a abarcar la mayor parte de las tareas reales que se hacen con los datos. Estudiaremos en detalle los operadores clsicos. a

Tablas
Estas sern las tablas que usaremos en la mayor de ejemplos a a Empleado nombre Torres Soto Prez e Figueroa Salas R os Campos Venegas Carcamo Gonzalez sueldo $ 1.200.000 $ 500.000 $ 300.000 $ 600.000 $ 1.500.000 $ 2.000.000 $ 800.000 $ 600.000 $ 500.000 $ 2.000.000 cod dept A1 A2 A2 A1 A1 A3 A2 A1 A2 A3 f echa ing 01/01/2004 01/01/2003 01/10/2003 01/03/2002 01/01/2002 01/06/2002 01/11/2003 01/06/2002 01/04/2003 01/10/2002

Departamento nombre Informtica a Marketing Ventas Recursos Humanos cod dept A1 A2 A3 A4 f echa creac 01/03/2002 01/01/2002 01/01/2001 01/01/2003

Seleccin o
Operador de seleccin o tuplas de una relacin. o

, selecciona un subconjunto de las

Tuplas seleccionadas son las que satisfacen cierto predicado lgico P . El predicado puede depender de los atributos de la o relacin y de valores constantes. o El operador toma una relacin como argumento y el reo sultado es una nueva relacin. o Sintaxis:

P (r)
Seleccionar los datos del empleado Soto:

nombre=Soto(empleado)
nombre Soto sueldo $ 500.000 cod dept A2 f echa ing 01/01/2003

Los datos de los empleados con sueldo $500.000 que ingresaron despues del 2003:

sueldo500000 f ech ing1/1/2003(empleado)


nombre Soto Campos Carcamo Torres sueldo $ 500.000 $ 800.000 $ 500.000 $ 1.200.000 cod dept A2 A2 A2 A1 f echa ing 01/01/2003 01/11/2003 01/04/2003 01/01/2004

Proyeccin o
Operador de proyeccin o , proyecta una relacin sobre un o subconjunto de sus atributos. El operador toma una relacin como argumento y el reo sultado es una nueva relacin. o Sintaxis:

A(r) nombre(departamento)
nombre Informtica a Marketing Ventas Recursos Humanos

donde A representa el conjunto de atributos sobre los que la relacin r se proyectar. o a Ejemplo: obtener los nombres de los distintos departamentos

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 relacin es un conjunto. o
3

Composicin de Operaciones o
El resultado de cada operacin es una nueva relacin se o o pueden aplicar operadores a los resultados de aplicaciones previas. Por ejemplo:

A(P (r)) P (A(r)) P1 (P2 (r))


Obtener los nombres de los empleados que ganan ms de a $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 $ 500.000 f echa ing 01/01/2003

Unin o
Dado que las relaciones son conjuntos de tuplas, se pueden realizar las operaciones usuales de conjuntos como la unin. o

Sintaxis: usamos notacin inja o

r1 r2
Se deben hacer ciertas restricciones para realizar la unin: o

Ambas relaciones deben tener el mismo nmero de atribu utos. El dominio del atributo i-simo de cada relacin debe coe o incidir.
Obtener los nombres de los empleados que ganan mas de $1.500.000 o que trabajan en el departamento con cdigo o A1.

nombre( sueldo>1500000(empleado) cod dept=A1(empleado))


nombre Torres Figueroa Salas R os Venegas Gonzalez

Diferencia
Tambin se puede usar la diferencia de conjuntos, las tuplas e que estn en una relacin pero no en la otra. a o

Sintaxis: usamos notacin inja o

r1 r2
Para poder realizar la diferencia se deben cumplir las mismas restricciones que para la unin o Ejemplo:

nombre(alumno) nombre( carrera=Bioinformatica(alumno))


Resulta en una relacin que contiene a todos los nombres de o los alumnos excepto de los alumnos de la carrera de Bioinformtica. a

Producto Cartesiano
Representa al producto cartesiano usual de conjuntos. Combina tuplas de cualquieras dos (o ms) relaciones, hace a la combinacin de todos con todos. o Si las relaciones a operar tienen N y M tuplas de n y m componentes respectivamente, la relacin resultante del el o producto cartesiano tiene N M tuplas de n + m componentes. Sintaxis: usamos notacin inja o

r1 r2
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 ciertos atributos para no tener porblemas. departamento departamento
nombre Informtica a Informtica a Informtica a Informtica a Marketing Marketing Marketing Marketing Ventas Ventas Ventas Ventas Rec. Hum. Rec. Hum. Rec. Hum. Rec. Hum. cd A1 A1 A1 A1 A2 A2 A2 A2 A3 A3 A3 A3 A4 A4 A4 A4 f ec creac 01/03/2002 01/03/2002 01/03/2002 01/03/2002 01/01/2002 01/01/2002 01/01/2002 01/01/2002 01/01/2001 01/01/2001 01/01/2001 01/01/2001 01/01/2003 01/01/2003 01/01/2003 01/01/2003 nombre Informtica a Marketing Ventas Rec. Hum. Informtica a Marketing Ventas Rec. Hum. Informtica a Marketing Ventas Rec. Hum. Informtica a Marketing Ventas Rec. Hum. cd A1 A2 A3 A4 A1 A2 A3 A4 A1 A2 A3 A4 A1 A2 A3 A4 f ec creac 01/03/2002 01/01/2002 01/01/2001 01/01/2003 01/03/2002 01/01/2002 01/01/2001 01/01/2003 01/03/2002 01/01/2002 01/01/2001 01/01/2003 01/03/2002 01/01/2002 01/01/2001 01/01/2003 7

Producto Cartesiano: Ejemplos


Obtener el nombre del departamento en el que Soto trabaja: Primero hacemos la unin cartesiana igualando un atributo o

depto.cod depto=emp.cod depto(empleado departamento)


Ahora podemos hacer la seleccin y proyeccin o o (

depto.cod depto=emp.cod depto(empleado departamento)))


departamento.nombre Marketing

depto.nombre( emp.nombre=Soto

Renombre
A veces necesitamos obtener informacin uniendo datos de o la misma tabla. Por ejemplo, obtener los nombres de todos los empleados que ingresaron despus que Soto a la empresa. e Primer intento: empleado (

nombre=Soto(empleado)) soluciona el problema.

Cmo nos referimos a una u otra instancia de la tabla o empleado? El operador de renombre

El operador toma una relacin y entrega la misma relacin o o pero con otro nombre, podemos referirnos a distintas instancias de la misma relacin. o Sintaxis:

x(r)

Volviendo al ejemplo, obtener los nombres de todos los empleados que ingresaron despus que Soto a la empresa, see gundo intento: empleado (

nombre=Soto(empleado2(empleado))

Ahora podemos hacer:

empleado.nombre( empleado.f echa ing>empleado2.f echa ing (empleado ( nombre=Soto (empleado2 (empleado))))

Formalizacin y Notacin de Arbol o o


El lgebra relacional es un lenguaje de expresiones. Toda a expresin se puede generar a partir de las siguientes reglas: o

Toda relacin de la base de datos es una expresin. o o Si E1 y E2 son expresiones entonces las siguientes tambin e 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 relacin E1. o

Cada expresin generada por las reglas anteriores tiene como o resultado una relacin. o Toda relacin resultado de una expresin en el lgebra relao o a cional se puede ver como un rbol donde cada nodo interno a est etiquetado por una operacin: a o

Las hojas son relaciones efectivas de la base de datos. La relacin representada por un rbol es la relacin que o a o resulta de aplicar la operacin etiquetada en su ra a las o z relacin representadas por cada uno de los subrboles hijos. o a
Por ejemplo la relacin resultante de o (

depto.cod depto=emp.cod depto(empleado departamento)))

depto.nombre( emp.nombre=Soto

Est representada por el siguiente rbol (en la pizarra...) a a A veces es ms cmodo representar expresiones extensas usa o ando rboles. a
10

Operaciones Adicionales, Interseccin o


Las operaciones anteriores son sucientes para denir toda el algebra relacional. Algunas consultas habituales son complejas de realizar con combinaciones de operaciones simples, usamos algunos operadores adicionales. Interseccin o La interseccin usual de conjuntos. o Sintaxis: usamos notacin inja o

r1 r2
Se deben cumplir las mismas restricciones que en la unin y o diferencia, los atributos de la relaciones involucradas deben tener los mismos dominios. La interseccin se puede crear a partir de la diferencia: o

r1 r2 = r1 (r1 r2)
Ejemplo:

nombre(alumno preg) nombre(alumno posg)


resulta en una relacin que contiene los nombres de todos o los alumnos que son simultneamente de pre y posgrado. a
11

Reunin Natural(Join) o
Hace un producto cartesiano de sus dos argumentos y realiza una seleccin forzando la igualdad de atributos que aparecen o en ambas relaciones. Elimina repetidos (como toda operacin de conjuntos). o Sintaxis:

r1 r2

Ejemplo: listar todos los empleados y el nombre del departamento en el que trabajan

emp.nombre,dept.nombre(empleado departamento)
empleado.nombre Torres Soto Prez e Figueroa Salas R os Campos Venegas Carcamo Gonzalez departamento.nombre Informtica a Marketing Marketing Informtica a Informtica a Ventas Marketing Informtica a Marketing Ventas

12

Join en General
Un forma ms general de hacer Join es especicando una a propiedad de reunin. o Se hace entonces un producto cartesiano de las dos relaciones y se realiza una seleccin forzando una propiedad ms o a general que la igualdad de atributos que aparecen en ambas relaciones. Sintaxis:

r1 P r2

donde P es la propiedad de reunin. o Ejemplo: listar todos los pares de nombres de empleados y departamentos tales que el empleado ingres a la empresa o en una fecha anterior a la de creacin del departamento o

empleado (f echa

emp.nombre,depto.nombre(
ing<f echa creac)

departamento)

13

Relaciones Temporales
A veces las consultas se hacen muy extensas. Una forma de simplicarlas es usando relaciones temporales y asignndoles expresiones para usar despus: a e r E asigna la expresin de lgebra relaciones E a la nueva o a relacin r. o Ejemplo: temp sueldo>500000 (empleado departamento) empleado.nombre,departamento.nombre(temp) El ltimo resultado son los nombres de empleados y el deparu tamento en el que trabajan tales que el sueldo del empleado es mayor a $500.000.

14

Clculo Relacional de Tuplas a


El clculo relacional de tuplas es un lenguaje no procedural. a Con el lgebra relacional damos un procedimiento para una a expresin. o A1 ,B1 (A1 =v (rA rB )) En el clculo relacional de tuplas especicamos la informacin a o deseada sin dar un procedimiento para obtenerla. {t|P (t)} Este ltimo conjunto representa a la relacin de todas las u o tuplas t que cumplen la propiedad lgica P . o Supongamos que necesitamos slo los nombres de los emo pleados que tienen sueldo mayor a $500.000. En lgebra relacional usamos el operador a para obtener slo los nombres. En el clculo relacional de tuplas debemos o a usar la construccin existe : o t r(Q(t)) que signica: existe una tupla t en la relacin r que cumple o 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 relacin empleado para la cual los valores de t o y s son iguales en el atributo nombre y el valor de s en el atributo sueldo es mayor que 500000. La variable de tupla t se dene slo en el atributo nombre, es o el nico atributo no cuanticado. El resultado es una relacin u o con slo un atributo. o
15

Clculo Relacional de Tuplas: Ejemplos a


Supongamos que necesitamos los datos de todos los empleados del departamento de Marketing y no sabemos el cdigo o del departamento. En lgebra relacional usamos el operador para obtener los a datos de ambas tablas. En el clculo relacional de tuplas debemos usar tambin la a e construccin existe: o {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 relacin o empleado tales que existe una tupla s en la relacin departamento o 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. Cmo expresamos consultas del tipo los nombres de todos o los alumnos que no son de bioinformtica, suponiendo que a contamos con las relaciones alumno y alumno bioinf ormatica? Necesitamos el operador lgico de negacin . o o {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 relacin alumno que comparte el atribo uto nombre con t y NO existe una tupla u en la relacin o alumno bioinf ormatica que comparta el atributo nombre con t.

16

Clculo Relacional de Tuplas: Ejemplos (cont.) a


En general podemos usar casi cualquier expresin lgica o o 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 relacin departamento con la que comparte o el atributo nombre y que para toda tupla u en la relacin o 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 estn los nombres de los departamentos a cuyos empleados tienen todos un sueldo mayor a $500.000. Cmo hacemos esta consulta en lgebra relacional? o a Por qu casi todas las expresiones lgicas? Qu resulta e o e de la siguiente consulta? {t | (t empleado)} Resulta una relacin con un nmero innito de tuplas! o u Tuplas que ni siquiera se encuentran en nuestra base de datos! No aceptamos entonces este tipo de consultas, aceptamos slo consultas seguras. o Una consulta {t | P (t)} es segura si el resultado son valores que pertenecen a dom(P ), donde dom(P ) es la unin de los o dominios de todas las relaciones que aparecen en P . {t | (t empleado)} no es segura {t | t alumno (t alumno bioinf ormatica)} si es segura.
17

Clculo Relacional de Dominios a


Es un lenguaje de consulta sobre el modelo relacional no procedural. A diferencia del clculo relacional de tuplas, consulta acerca a valores del dominio de los atributos de las relaciones, no de las tuplas de stas. e Una consulta en clculo relacional de dominios es de la sigua iente forma: {< x1 , x2 , . . . , xn > | P (x1 , x2 , . . . , xn )} dnde x1 , x2 , . . . , xn se llaman variables de dominio y P es una o frmula proposicional sobre las variables del dominio. o Ejemplo: Obtener el nombre, el cdigo y la fecha de creacin o o de los departamentos creados despus del 2003 e {< 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 ms simple representar consultas para atributos a espec cos en el clculo de dominios que en el clculo de a a tuplas. Tambin existe una nocin muy similar de consultas seguras e o en el clculo de tuplas. Las consultas que se salen del dominio a no son seguras.
18

Algebra vs Clculo Relacional a


El clculo relacional nos entrega dos lenguajes de consulta a en una base de datos bajo el modelo relacional. A veces se hace mucho ms natural expresar consultas en a un lenguaje de clculo relacional que con el lgebra relacional. a a Ventaja: se expresa lo que se quiere sin necesitar explicar cmo obtenerlo (sin especicar un procedimiento). o Resultado muy importante: El lgebra relacional, el clculo relacional de tuplas y el a a clculo relacional de dominios tienen el mismo poder a expresivo pueden responder el mismo tipo de consultas en una base de datos relacional. Interesante porque el clculo relacional est basado en lgica a a o de primer orden que tiene mucha teor estudiada. a Con lgica podemos demostrar que ciertas consultas no se o pueden lograr con slo Algebra Relacional. o El ejemplo cannico de consulta que no se puede realizar es o la clausura transitiva.

Relacin de vuelos con nmero indenido de escalas o u Relacin de ancestros o


Otro ejemplo no realizable, contar: determinar si la cantidad de tuplas de una relacin es par o

19

Modicacin de la Base de Datos o


Hasta ahora hemos visto como obtener informacin desde la o Base de Datos. Es necesario entregar herramientas para poder alterar el estado de la Base de Datos. Eliminacin, Insercin, Actualizacin son algunas de las taro o o eas necesarias, usaremos el lgebra relacional. a Eliminacin o Usamos el operador de diferencia () y asignacin () o r rE donde r es una relacin y E una expresin del lgebra relao o a 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 Torres Figueroa Salas R os Venegas Gonzalez sueldo $ 1.200.000 $ 600.000 $ 1.500.000 $ 2.000.000 $ 600.000 $ 2.000.000 cod dept A1 A1 A1 A3 A1 A3 f echa ing 01/01/2004 01/03/2002 01/01/2002 01/06/2002 01/06/2002 01/10/2002

20

Modicacin de la Base de Datos (cont.) o


Insercin o Usamos el operador de unin o r rE donde r es una relacin y E una expresin del lgebra relao o a cional. Agregar el departamento de Finanzas con cdigo A5 y fecha o de creacin 5/8/2004 o departamento departamento {(Finanzas, A5, 5/8/2004)}
nombre Informtica a Marketing Ventas Recursos Humanos Finanzas cod dept A1 A2 A3 A4 A5 f echa creac 01/03/2002 01/01/2002 01/01/2001 01/01/2003 05/08/2004

Actualizacin o A veces queremos cambiar el valor de algn atributo de una u tupla sin cambiarla entera. Podr hacerse una eliminacin e a o insercin, pero resulta engorrosos muchas veces. o Usamos un nuevo operador (no reasignamos!): AE (r) que representa el hecho de cambiar el atributo A por la expresin matemtica E en la relacin r. o a o 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 sueldosueldo1,1 (sueldo1000000 (empleado)) sueldosueldo1,2 (sueldo<1000000 (empleado))
21

Cuidado con el orden!!!


nombre Torres Soto Prez e Figueroa Salas R os Campos Venegas Carcamo Gonzalez sueldo $ 1.320.000 $ 600.000 $ 360.000 $ 720.000 $ 1.650.000 $ 2.200.000 $ 960.000 $ 720.000 $ 600.000 $ 2.200.000 cod dept A1 A2 A2 A1 A1 A3 A2 A1 A2 A3 f echa ing 01/01/2004 01/01/2003 01/10/2003 01/03/2002 01/01/2002 01/06/2002 01/11/2003 01/06/2002 01/04/2003 01/10/2002

También podría gustarte