Práctico - Facultad de Ciencias Exactas

Anuncio
BASES DE DATOS I
UNCPBA – Fac. Ciencias Exactas
PRÁCTICO 2 – P2
Curso 2008
PRÁCTICO 3: Algebra – Optimización
Algebra relacional y álgebra de bolsas
1) Considerando la siguiente base de datos
1.1) Interprete en lenguaje natural el resultado de las siguientes operaciones expresadas en álgebra relacional
y plantéelas en SQL:
a)  materia.tipo_doc, = profesor.tipo_doc and materia.nro_doc=profesor.nro_doc (MATERIA X PROFESOR)
b)  tipo_doc, nro_doc, apellido (ALUMNO
PERSONA)
c)  tipo_doc, nro_doc, id_materia(MATERIA PROFESOR)
d)  tipo_doc, nro_doc ALUMNO -  tipo_doc, nro_doc INSCRIPTO_EN
e) [  tipo_doc, nro_doc (ALUMNO PROFESOR) ] PERSONA
f) [  telefono (PROFESOR PERSONA ) ∩  telefono (FACULTAD) ]
1.2) Escriba en álgebra relacional las expresiones que permitan resolver los siguientes servicios:
a)
b)
c)
d)
e)
f)
g)
Obtener la lista de las materias correspondientes al plan #P1
Listar los DNI de los alumnos inscriptos en materias de la facultad #F2.
Listar los profesores de la facultad #F1 y las materias que tienen a cargo
Obtener los datos completos de los alumnos inscriptos en materias del plan #P2
Generar una lista con los apellidos y número de libreta de los alumnos del profesor Martinez
Obtener los datos completos de alumnos inscriptos en materias de carreras de más de 2 años de duración
Listar los alumnos que se han inscripto en todas las materias del plan #P1
1.3) Resuelva las siguientes consultas en álgebra relacional y en SQL por medio de unión, intersección o
diferencia:
a) Listar las personas que son alumnos o profesores de la facultad Facu-1
Página 1 de 4
BASES DE DATOS I
UNCPBA – Fac. Ciencias Exactas
b)
c)
d)
e)
PRÁCTICO 2 – P2
Curso 2008
Encontrar las materias que no poseen alumnos inscriptos.
Listar los apellidos coincidentes entre alumnos y profesores.
Generar la lista de libretas de los alumnos que no se hayan inscripto en materias del plan #P1.
Listar los datos completos de los miembros de la facultad #F2, ya sea profesores o alumnos.
1.4) Analice si las expresiones planteadas en 1.2) y 1.3) son válidas también en álgebra de bolsas y
reformúlelas en caso contrario. Comente acerca de los resultados obtenidos en cada caso.
1.5) Evalúe si las siguientes consultas producirían el mismo resultado según se trate de álgebra relacional o
álgebra de bolsas:
a)
b)
c)
d)
 id_materia (nro_doc > 30.000.000 MATERIASXALUMNO)
 tipo_doc, nro_doc ALUMNO -  tipo_doc, nro_doc ALUMNOSXPLAN
 apellido (ALUMNO PERSONA) -  apellido (ALUMNOSXPLAN PERSONA)
(tipo_doc = DNI, nro_doc = 34.567.890) (  tipo_doc, nro_doc MATERIASXALUMNO)
1.6) Analice cada consulta y conviértala a expresiones del álgebra relacional o de bolsas, según corresponda:
a) Obtener los datos de los alumnos inscriptos en materias junto con el nombre de cada materia.
select *
from persona p, materia m, materiasxalumnos ma
where p.tipo_doc
= ma.tipo_doc and
p.nro_doc
= ma.nro_doc and
ma.id_materia = m.id_materia;
b) Obtener los datos de las facultades donde se dictan carreras cuya duración es de 2 años o menos.
select id_facultad, nombre_facultad, telefono, decano
from facultad
where id_facultad IN (select id_facultad from carrera where duracion <= 2);
c) Obtener los datos de todas las facultades con sus carreras si las tuviera
select *
from facultad f left join carrera c on (f.id_facultad = c.id_facultad);
Optimización de Consultas
2) Considere las siguietes relaciones que representan tablas de una Base de Datos de pacientes de Obras
Sociales:
OBRASOCIAL(idobrasocial, dobrasocial) CIE10(idcie10,dcie10);
PACIENTE(idpaciente, apynomb, domicilio, idobrasocial) PROFESIONAL(idprofesional, apynomb)
INTERNACION(idinternacion, idprofesional, idpaciente,idcie10, fechaingreso)
donde cada tabla contiene la siguiente cantidad de tuplas:
 Obra Social = 1.300
 Paciente = 300.000
 Profesional = 100
 cie10 (Clasificación Internacional de Enfermedades) = 11.500
 Internacion = 42.000
Página 2 de 4
BASES DE DATOS I
UNCPBA – Fac. Ciencias Exactas
PRÁCTICO 2 – P2
Curso 2008
2.1) Para los siguientes pares de sentencias equivalentes (que permiten obtener el mismo resultado):

Construya el árbol de la consulta.

Calcule la cantidad de tuplas involucradas en cada procesamiento.

¿Cuál de ellas resulta más eficiente en función del análisis anterior?
a) Obtener el diagnóstico de las internaciones.
a.1) SELECT c.dcie10
FROM internacion i left join cie10 c on (i.idcie10 = c.idcie10)
WHERE i.idcie10 is not null;
a.2) SELECT c.dcie10
FROM internacion i, cie10 c
WHERE i.idcie10 = c.idcie10 and
i.idcie10 is not null;
b) Obtener el apellido, el número y nombre del club para todos los socios
b.1) SELECT s.apellido, s.id_club, i.nombre_club
FROM socio s, club c
WHERE s.id_club = c.id_club;
b.1) SELECT s.apellido, s.id_club, i.nombre_club
FROM socio s join club c on (s.id_club = c.id_club);
c) Obtener todas las internaciones que fueron atendidas por Obra Social.
b.1) SELECT i.idinternacion
FROM paciente p left join obrasocial os on (p.idobrasocial = os.idobrasocial) as pacos pos, internacion i
WHERE pos.idobrasocial is not null and i.idpaciente = p.idpaciente;
b.2) SELECT i.idinternacion
FROM internacion i left join paciente p on (i.idpaciente = p.idpaciente),
obrasocial os
WHERE p.idobrasocial = os.idobrasocial;
2.2) Optimizar cada una de las siguientes consultas y comparar el resultado con la consulta original en
términos de cantidad de tuplas/volumen de información involucrada.
a) obtener qué profesional atendió a cada paciente.
select p.idpaciente, pr.idprofesional
from paciente p, profesional pr, internacion i
where p.idpaciente = i.idpaciente and i.idprofesional = pr.idprofesional
b) Obtener los idpaciente de las personas que se internaron antes del 24/09/2007 y después del
24/09/2008, y que además se llamen “PEREZ, MARIA”
select idpaciente
from ( select * from internacion i, paciente p
where i.fechaingreso > ‘24/09/2007’ and i.idpaciente = p.idpaciente
union
select * from internacion i, paciente p
where i.fechaingreso < ‘24/09/2007’and i.idpaciente = p.idpaciente
) as pin
where pin.apynomb = “PEREZ, MARIA”;
Página 3 de 4
BASES DE DATOS I
UNCPBA – Fac. Ciencias Exactas
PRÁCTICO 2 – P2
Curso 2008
2.3) Analizar cada caso y justificar la creación o no de índices. Considerar que cada consulta es muy frecuente
en el contexto planteado.
a) select *
from socio
where fecha_nacimiento > to_date('10/09/1997', 'dd/mm/yyyy');
b) select *
from socio
where nro_socio > 10;
c) select *
from socio
where nombre = 'John' and e_mail = '[email protected]';
d) select *
from socio
where nombre LIKE ‘Ke%’ and e_mail = ‘[email protected]’;
e) select *
from socio
where nombre LIKE ‘%vin’ and e_mail = ‘[email protected]’;
2.4) Si tiene creado un índice para la tabla Socio (no único) sobre los atributos Apellido y Nombre en dicho
orden, para cuales de las siguientes consultas se utilizará dicho índice:
a)
b)
c)
d)
select * from socio where apellido = 'De Haan' and nombre = 'Lex';
select * from socio where apellido = 'De Haan';
select * from socio where apellido like 'De Ha%';
select * from socio where apellido like '%De Ha%';
Tips para Oracle:

EXPLAIN PLAN FOR sentencia select;

Información en la tabla PLAN_TABLE y su contenido

Información que brinda el Execute explain Plan del SQL Developer.

Uso de Optimizer Hints de Oracle en la sentencia SELECT
Página 4 de 4
Descargar