Está en la página 1de 28

ALGEBRA Y CALCULO RELACIONAL Bases de Datos Universidad de Talca, II Semestre 2005 Jorge Prez R.

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 procedimientos para construir 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 durante el 2003:

sueldo500000 f ech ing1/1/2004(empleado)


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

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
4

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 atribuu tos. El dominio del atributo i-simo de cada relacin debe coine o cidir.
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 8

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 relao cin pero con otro nombre, podemos referirnos a distintas o 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))))

10

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 a o usando rboles. a
11

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
12

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

13

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)

14

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.

15

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 cuanticado. El resultado es una relacin u o con slo un atributo. o
16

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 atrio buto nombre con t y NO existe una tupla u en la relacin o alumno bioinf ormatica que comparta el atributo nombre con t.

17

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.
18

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 sia guiente 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 c = 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, a, 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.
19

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.

20

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 tao o o reas 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

21

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))
22

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

Vistas
Hasta ahora hemos operado al nivel conceptual, directamente con las tablas de la base de datos. Muchas veces es mejor que ciertos usuarios tenga acceso a ciertos datos o vistas de los datos. Por ejemplo en una aplicacin para jar reuniones, los emo pleados deben poder ver los nombres de los empleados y los departamentos a los que pertenecen pero no sus sueldos. emp.nombre,emp.cod
dept,dept.nombre (empleado

departamento)

Para crear una vista usaremos conceptualmente la sentencia create view de la siguiente forma: create view v as E dnde v es el nombre de la vista a crear y E es una expresin o o de consulta. Una vista puede usarse como cualquier relacin efectiva de o la base de datos, pero cuidado una vista NO es una nueva relacin, es simplemente una forma abreviada de referirse a o una consulta. La vista se instancia cada vez que nos referimos a ella. Ejemplo: create view importantes as nombre,cod dept(sueldo1000000 (empleado))
importantes nombre Torres Salas R os Gonzalez cod dept A1 A1 A3 A3 23

Actualizacin de Vistas y Valores Nulos o


Las vistas son tiles para consultar datos, pero presentan u problemas para actualizaciones. Por ejemplo, si escribimos importantes importantes {(Gomez, A4)} implica una actualizacin de la relacin empleado pero sin o o especicar ni sueldo ni fecha de ingreso. Existen entonces dos posibilidades:

Rechazar la insercin y gatillar un error. o Insertar la tupla (Gomez, null, A4, null) en la relacin empleado o
El valor null representa un valor nulo, desconocido o que no existe. Todas las comparaciones que implican null son por denicin falsas (esto ltimo tendr implicancias prcticas o u a a importantes). Un problema importante de la anterior actualizacin es que, o a pesar de que la relacin empleado tiene una nueva tupla o
nombre Torres Soto Prez e Figueroa Salas R os Campos Venegas Carcamo Gonzalez Gomez 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 null cod dept A1 A2 A2 A1 A1 A3 A2 A1 A2 A3 A4 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 null

La vista importantes no cambia

24

Actualizacin de Vistas (cont.) o


El siguiente es el reultado de la vista importantes antes y despus de la insercin si se ingresan valores nulos para los e o atributos no especicados.
importantes nombre Torres Salas R os Gonzalez cod dept A1 A1 A3 A3

importantes importantes {(Gomez, A4)}


importantes nombre Torres Salas R os Gonzalez cod dept A1 A1 A3 A3

El tema de actualizacin sobre vistas es muy interesante deso de el punto de vista terico y aun hay investigacin en el rea o o a principalmente por el crecimiento de necesidades de integracin de informacin. o o Una posible solucin al problema ser haber insertado datos o a (m nimos) adicionales al ingresar la nueva tupla en la vista de manera de obtener el resultado deseado, o sea, haber insertado la tupla con atributo (Gomez, 1000000, A4, null) pero cmo podemos tomar esta decisin automticamente?... un o o a interesante tema para estudiar...

25

También podría gustarte