sábado, 6 de septiembre de 2008

Implementación de operaciones sobre conjuntos

- Unión (RUS)

- Intersección (R S)

- Diferencia (R-S)

- Producto cartesiano.




- La unión, intersección y diferencia sólo se aplican a relaciones compatibles con la unión, es decir, que tengan los mismos atributos (número y definidos en el mismo contexto).

- Ordenar las dos relaciones según los mismos atributos

- Con una sola pasada se obtiene el resultado

RUS: Se examinan los archivos de forma concurrente

- Cuando se encuentra la misma tupla en ambas relaciones, sólo se conserva una.

R S: Únicamente se conserva en el resultado sólo las tuplas que aparezcan en ambos archivos.

En la unión, intersección y diferencia se puede utilizar la dispersión, llevándolas a la misma cubeta del archivo.

RUS: Se dispersan los registros de R al archivo de dispersión, luego dispersar los registros de S en el cual no se insertan los registros repetidos.

RUS: Se dispersan todos los registros de R luego los registros de S, si se encuentra un registro idéntico en la cubeta se añade el registro al archivo resultado.

R-S: Se dispersan los registros de R, luego los de S, si se encuentra un archivo idéntico en la cubeta, se elimina toda esa tupla.




Empleo de la heurística en la optimización de consultas SQL

SQL1.

Select Proyecto.noProyecto,

Depto.noDepto,

Empleado.dirección,

Empleado.fechaNac

From Proyecto, Depto, Empleado

Where Proyecto.noDepto=Depto.noDepto

and Proyecto.lugar=”México”;

1) Árbol canónico

a) Operaciones de producto cartesiano (X)

b) Restricciones de selección (σ)

Un árbol de consulta:

Estructura en forma de árbol corresponde a una expresión del álgebra relacional.

- Representa las relaciones de entrada como nodo hoja

- Operaciones del algebra relacional los nodos internos.

Árbol canónico: Estructura en forma de árbol corresponde a una consulta en SQL sin efectuar optimización alguna.

1) Se aplica el producto cartesiano de las relaciones que aparecen en la cláusula FROM (de derecha a izq).

2) Las condiciones de selección y reunión de la cláusula WHERE, seguida de la proyección sobre los atributos que aparecen en la cláusula SELECT.

1. Obtener el árbol canónico a partir de la consulta SQL 1




Transformación de una expresión algebraica a un árbol de consulta

Ejemplo 1

noProyecto.noDepto,apellido,dirección,fechaNac(((σlugarP=”México”(Proyecto))|X|noDepto=noDepto(Depto)) |X|noEmpGerente=noEmp(Empleado))







Ejemplo 1

Árbol de consulta



Ponemos los atributos de la proyección como raíz del árbol. Después empezamos a resolver los paréntesis de derecha a izquierda,

Optimización de consultas por heurística

SQL 2

Select Empleado.apellido

From Empleado, TrabajaEn, Proyecto

Where Proyecto.nombreP=”Rediseño 2008”

and Proyecto.noProyecto=TrabajaEn.noProyecto

and TrabajaEn.noEmp=Empleado.noEmp

and Empleado.fechaNac > “31/12/1985”;

1) Obtener el árbol canónico




2) Considerar las restricciones de (σ)



Aquí vemos que la selección nombreP=”Rediseño” nos estaría dando de resultado una sola tupla, mientras que Empleado nos da algunas y TrabajaEn todas.

3) Aplicar conmutatividad entre las relaciones donde se aplica el producto cartesiano (menor # tuplas)


4) Identificar la operación de reunión en el árbol de consulta




5) Acomodar las proyecciones en el árbol de consulta

Tomamos todos los atributos de las tablas y vemos cuales son relevantes, las demás se quitan.




6) Generar expresión algebraica del árbol de consulta

apellido[(( noProyecto,nombrePnombreP=”Rediseño 2008”(Proyecto))) |X|noProyecto=noProyecto noEmp,noProyecto(TrabajaEn)) |X|noEmp=noEmp noEmp,apellido,fechaNacfechaNac>”31/12/1985”(Empleado))]


Ejemplo SQL 3

Select Alumno.noBoleta,

Alumno.nombre,

From Alumno,AMateria,Materia,Prof

Where Prof.nombre=”Nancy Ocotitla”

And Materia.materia=”BD I”

And Alumno.noBoleta=AMateria.noBoleta

And AMateria.codMat=Materia.codMat

And Materia.codProf=Prof.codProf;



1) Obtener el árbol canónico



2) Considerar las restricciones de (σ)



3) Aplicar conmutatividad entre las relaciones donde se aplica el producto cartesiano (menor # tuplas)

En este caso Materia y Prof nos van a dar una tupla al momento de aplicar la restricción de selección. Hay que ver de qué forma están relacionadas las tablas para saber cual podemos mover sin alterar el orden de relación (llaves).



4) Identificar la operación de reunión en el árbol de consulta




5) Acomodar las proyecciones en el árbol de consulta




6) Generar expresión algebraica del árbol de consulta

noBoleta,nombre[(( codProfnombre=”Nancy Ocotitla”(Prof)) |X|codProf=codProf( codMat,codProfmateria=”BD I”(Materia)))) |X|codMat=codMat( noBoleta,codMat(AMateria))) |X|noBoleta=noBoleta( noBoleta,nombre(Alumno))]