Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sucursal = (nombreSucursal, ciudad, activos) Cliente= (idCliente, nombre, calle, ciudad) Cuenta= (nroCuenta, nombreSucursal, saldo) PoseeCuenta= (idCliente, nroCuenta) Prstamo= (nroPrstamo, nombreSucursal, importe) PoseePrstamo= (idCliente, nroPrstamo)
Tabla Cliente
idCliente 19.283.746 1.928.374 nombre Gonzalez Gmez calle Arenal Carretas ciudad La Granja Junn nroPrstamo P-15 P-10
Tabla Prstamo
nombreSucursal Ro Centro importe 50000 7000
Tabla PoseeCuenta
idCliente 19.283.746 19.283.746 1.928.374 67.789.901 nroCuenta C-101 C-201 C-215 C-102
67.789.901 18.273.609
32.112.312 33.666.999 25.123.456 23.928.374
Lpez Abril
Santos Ruprez Daz Prez
Mayor Preciados
Mayor Ramblas Corrientes Maip
Pergamino Valsain
Pergamino Len La Plata Junn
P-30 P-20
Centro Sur
40000 3500
18.273.609
32.112.312 23.928.374
C-305
C-217 C-201
Tabla Sucursal
nombreSucursal ciudad Crdoba Paran Neuqun Paran Paran La Plata activos 50.000.000 38.000.000 16.000.000 33.000.000 65.000.000 55.000.000
Tabla Cuenta
nroCuenta nombreSucursal saldo
Tabla PoseePrstamo
idCliente 19.283.746 1.928.374 18.273.609 33.666.999 23.928.374 nroPrstamo P-30 P-10 P-20 P-15 P-10
C-101
C-215 C-102 C-305 C-201 C-217
Centro
Ro Centro Centro Sur Ro
500
700 400 350 900 750
Oeste
La Plata
43.000.000
Adems de los seis operadores bsicos definidos, existen otros operadores que otorgan mayor expresividad al lgebra Relacional, facilitando en muchos casos la construccin de las operaciones de consulta. A continuacin se describen cuatro operaciones adicionales: reunin natural, interseccin, asignacin y divisin.
Rene las tuplas de la primera tabla que se relacionan con la segunda tabla, descartando las tuplas no relacionadas. Entre las tablas debe existir un atributo comn. De no existir el atributo comn, el producto natural y el producto cartesiano actan de la misma forma. Es asociativa.
Ejemplo: Hallar los identificadores de los clientes que tienen prstamo en el banco y averiguar su nmero de prstamo y el importe
idCliente,nroPrstamo,importe(PoseePrstamo |x | Prstamo)
Tabla PoseePrstamo
idCliente 19.283.746 1.928.374 18.273.609 33.666.999 23.928.374 nroPrstamo P-30 P-10 P-20 P-15 P-10 nroPrstamo
Tabla Prstamo
nombreSucursal importe
idCliente 19.283.746
nroPrstamo P-30
importe 40000
P-15
P-10 P-30 P-20
Ro
Centro Centro Sur
50000
7000 40000 3500
1.928.374
18.273.609 33.666.999 23.928.374
P-10
P-20 P-15 P-10
7000
3500 50000 7000
tabla1
tabla2
Genera una nueva tabla con las tuplas comunes a ambas tablas. Las tablas deben ser de unin compatibles; en su defecto, el resultado ser una tabla vaca. Es un operador adicional, debido a que es posible obtener la interseccin a partir de la diferencia: A B = A (A B)
Ejemplo: Conocer todos los identificadores de los clientes que tienen prstamo y cuenta en el banco
U
idCliente(PoseePrstamo)
Tabla PoseeCuenta
idCliente 19.283.746 nroCuenta C-101
idCliente(PoseeCuenta)
idCliente 19.283.746 1.928.374 18.273.609 23.928.374
Tabla PoseePrstamo
idCliente 19.283.746 nroPrstamo P-30
19.283.746
1.928.374 67.789.901 18.273.609 32.112.312
C-201
C-215 C-102 C-305 C-217
1.928.374
18.273.609 33.666.999 23.928.374
P-10
P-20 P-15 P-10
23.928.374
C-201
Genera una nueva tabla con los valores de atributos de tabla1 que se relacionan con todas las tuplas de tabla2. El esquema de la tabla2 debe estar incluido en el esquema de la tabla1, es decir todos los atributos de la tabla2 deben ser atributos de la tabla1.
tabla2
Ejemplo
tabla1
Y Y1 Y2
X X1 X3
X1 Y1 X1 Y2 X2 Y1
X3 Y2
X3 Y1
X4 Y2
tabla1
tabla2
tabla2
Ejemplo: Hallar a todos los identificadores de clientes que tengan abierta una cuenta en todas las sucursales ubicadas en la ciudad de Crdoba.
Tiene como objetivo otorgar mayor legibilidad a las consultas. Vuelca el resultado de una consulta en una variable temporal de tabla, la cual puede ser utilizada posteriormente. Con la asignacin se pueden escribir las consultas como programas secuenciales que constan de una serie de asignaciones seguida de una expresin cuyo valor se muestra como resultado de la consulta.
Altas: Permite agregar una nueva tupla a una tabla existente. tabla tabla U {atributo1, atributo2,}
Bajas: Permite quitar una tupla entera de una tabla existente. tabla tabla - predicado(tabla)
Presentar todos los nombres de los alumnos que cursan la carrera de Sistemas y viven en la localidad de Ayacucho. Presentar el nombre de los alumnos que tengan aprobada alguna materia de tercer ao de cualquier carrera. Obtener los nombres de los alumnos que cursan la misma carrera que el alumno con id igual a 4444. Obtener los id de todos los alumnos que se inscribieron en todas las materias de la carrera con id igual a 45.
Optimizacin de consultas
15
Una consulta en lgebra relacional o en SQL puede ser resuelta de maneras diferentes sin afectar el resultado final.
En general, el diseador de la consulta centra su objetivo en obtener el resultado, en vez de analizar con detalle cul sera la mejor secuencia de pasos a aplicar para lograr una solucin en el menor tiempo de respuesta posible.
Optimizacin de consultas
16
La optimizacin de consultas es el proceso de seleccin del plan de evaluacin de las consultas ms eficiente de entre las muchas estrategias generalmente disponibles para el procesamiento de una consulta dada, especialmente si la consulta es compleja. Los SGBD presentan, en general, un optimizador de consultas.
Esquemticamente:
Usuario
Consulta
Consulta
optimizada
Optimizador
El proceso de optimizacin de consultas comienza con la consulta generada por el usuario, aplicando la siguiente secuencia de pasos:
1.
2.
3.
Un analizador sintctico (parser) genera una expresin manipulable por el optimizador de consultas. El anlisis sintctico convierte al texto de entrada -en este caso, la consulta del usuario- en una estructura tipo rbol, que resulta ms til para su anlisis. A partir de la expresin interna, el optimizador obtiene una consulta equivalente ms eficiente. Por ltimo, el proceso de optimizacin considera el estado actual de la Base de Datos y los ndices definidos, para resolver la consulta que se tiene hasta el momento, con el acceso a disco posible.
Para analizar con detalle el comportamiento del optimizador de consultas, se considera el nmero de accesos a disco como el factor determinante para estudiar la eficiencia de un mtodo. As, si una consulta genera 1000 tuplas intermedias y se la compara con una alternativa que slo genera 100, la segunda solucin ser considerada ms eficiente debido a que el acceso a 100 tuplas es ms rpido que el acceso a 1000 tuplas.
El proceso de optimizacin de consultas comienza analizando la consulta generada por el analizador sintctico.
Para analizar las operaciones involucradas en la consulta se utilizar el lgebra Relacional porque este lenguaje resulta ms claro para explicar el comportamiento.
Operacin de seleccin:
Efectuarla lo antes posible. Consideremos las tablas: Alumnos=(idAlumno, nombre, DNI,idLocalidad, idCarrera) Localidades=(idLocalidad, nombre) La consulta es Obtener los DNI de los alumnos de La Plata.
DNI ( Localidades.nombre = La Plata (Alumnos |x| Localidades))
Operacin de seleccin:
Intentar descomponer el predicado. Nuevamente, consideremos la tabla: Alumnos=(idAlumno, nombre, DNI,idLocalidad, idCarrera) La consulta es Obtener los nombres de los alumnos de la localidad con id igual a 1, que estn cursando la carrera cuyo id es 3.
nombre ( idCarrera = 3 AND idLocalidad = 1 (Alumnos))
Operacin de proyeccin:
En lneas generales, el anlisis de una proyeccin indica que esta operacin tambin debera realizarse lo antes posible. La proyeccin reduce el tamao de cada tupla, esto significa que cada tupla ocupar menos espacio en el buffer en memoria y, por consiguiente, ser posible almacenar ms elementos.
Expresiones del tipo tabla1 |x| tabla2 |x| tabla3, deben intentar resolverse en pasos, es decir, resulta ms eficiente resolver primero tabla1 |x| tabla2 y con el resultado obtenido realizar el producto natural con la tabla restante. Desde el punto de vista de performance, resulta tabla1 |x| tabla2 <> tabla2 |x| tabla1 (lo analizamos luego)
Para el anlisis del costo de las consultas, veremos algunos conceptos genricos que tienen que ver con el estado temporal de cada tabla de datos, los que permiten definir algunos valores:
CTtabla: Indica la cantidad de tuplas que actualmente tiene la tabla. CBtabla: Indica el tamao en bytes de cada tupla de la tabla. CV (a, tabla): Indica cuntos valores diferentes existen en la tabla para el atributo a.
Sea la expresin
El tamao en bytes de cada tupla es CBtabla, debido a que no se genera proyeccin alguna. Para analizar la cantidad de tuplas resultantes, se tendr en cuenta el CV(atributo, tabla), y se supondr que la distribucin de valores es uniforme. Con 1000 tuplas y con 20 valores diferentes para el atributo1, son esperables 50 (1000/20) tuplas para cada valor diferente. Como conclusin, la cantidad de tuplas esperables de la consulta planteada ser: CTtabla1 / CV(atributo, tabla1)
atributo (tabla1)
genera CTtabla1 tuplas, pero el tamao en bytes de las tuplas resultantes se reduce al espacio que requiere el dominio del atributo proyectado.
La expresin
tabla1 x tabla2
genera tuplas de tamao (CBtabla1 + CBtabla2), debido a que cada tupla de tabla1 se agrupa con cada tupla de tabla2. Por esa misma causa, la cantidad de tuplas obtenidas ser (CTtabla1 * CTtabla2).
Supongamos que entre tabla1 y tabla2 existe un atributo comn, A. Este atributo es clave primaria en tabla1 y clave secundaria en tabla2. Si se realiza
Si se realiza