• No se han encontrado resultados

algebra relacional

N/A
N/A
Protected

Academic year: 2020

Share "algebra relacional"

Copied!
24
0
0

Texto completo

(1)

´

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.

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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 ing

(11)

Formalizaci´

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

(12)
(13)

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

(14)

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

(15)

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(

(16)

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)

(17)

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

(18)

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

(19)

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

(20)

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

(21)

´

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

(22)

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

(23)

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

(24)

Cuidado con el orden!!!

nombre sueldo cod dept f echa ing

Referencias

Documento similar

 Si se especifica una relaci ´on funcional err ´onea (por ejemplo, una relaci ´on lineal cuando no lo es), el t ´ermino de perturbaci ´on captar ´a tal efecto provo-

Concretamente, el objetivo del trabajo es realizar una planificaci´on de tareas consciente del consumo en algoritmos de ´algebra lineal densa sobre mutiprocesadores y

Calcular los l´ımites

Para obtener los espectros de absorci´on y determinar las posibles transiciones de fase en funci´on de la presi´on a temperatura ambiente, se realiza la detecci´on del

Como se puede intuir, el an´ alisis de la tensi´ on superficial din´ amica est´ a amplia- mente ligado al estudio del transporte de mol´ eculas en la disoluci´ on, que tiene

En este trabajo haremos una breve introducci´ on a la teor´ıa de la forma de Borsuk, que extiende en cierta medida a la teor´ıa de homotop´ıa cl´ asica y que, adem´ as, es

A teor´ıa das distribuci´ ons do matem´ atico franc´es Laurent Schwartz (Medalla Fields en 1950) foi unha das d´ uas grandes revoluci´ ons do s´eculo pasado no eido da an´

El inconveniente operativo que presenta el hecho de que la distribuci´ on de probabilidad de una variable aleatoria es una funci´ on de conjunto se resuelve mediante el uso de