Actividad 3. Ejercicios

MATERIA: BASES DE DATOS AVANZADA NOMBRE DEL PROFESOR: ROY BALDERAS JIMENEZ NOMBRE DEL ALUMNO: Luis Mario Leon Morales

Views 93 Downloads 8 File size 270KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

MATERIA: BASES DE DATOS AVANZADA

NOMBRE DEL PROFESOR: ROY BALDERAS JIMENEZ

NOMBRE DEL ALUMNO: Luis Mario Leon Morales

Fecha: 3 de febrero del 2020

Trabajo: Actividad 3. Ejercicios

Ejercicio 1 Utilizando los siguientes conceptos, diseñar un diagrama conceptual que contenga al menos dos jerarquías de especialización y dos de agregación. El diagrama también deberá contener alguna relación de asociación. Dar atributos a todas las entidades.

• • • • • • • •

Periódicos Noticias Anuncios publicitarios Fotografías Textos Trabajadores de redacción Trabajadores de taller Redactores jefe

• • • • • • • •

Reporteros Maquetadores de taller Reveladores de taller Escribir noticia Aceptar noticia Maquetar noticia Maquetar anuncio Revelar fotografía

Ejercicio 2 Dado el siguiente esquema conceptual diseñar una base de datos orientada a objetos.

Formular las siguientes consultas sobre la base de datos oo anterior: 1. Utilizando la asociación expediente, seleccionar los profesores de las asignaturas de la titulación de ‘Derecho’ en las que se hayan matriculado más de 30 estudiantes. 2. Seleccionar los nombres de los estudiantes que siempre aprueban las asignaturas en primera convocatoria. define object type Profe extent Profesores type tuple[ nombre: string, departamento: string, email: string, imparte: set(asignatura) inverse asignatura:impartida_por, organiza: set(actividad) inverse actividad:impartida_por] operations añadir_profesor(p:Profe); define object type Asignatura extent Asignaturas type tuple [ nombre: string, num_creditos: set(tuple [ teoria:int,

practica:int]) impartida_por: set(Profe) inverse Profesor:imparte, optativa: set(ciclo) inverse materia:es_optativa_ciclo, obligatoria: set(curso) inverse materia: es_optativa_curso, estudiante: Estudiante inverse Asignatura:expediente.estudiante,

actividad: Actividad inverse Asignatura:se_compone_de.actividad, titulacion: Titulacion inverse Asignatura:se_compone_de.titulacion] operations añadir_profesor(p:Profe), añadir_a_expediente(e:Estudiante), quitar_de_expediente(e:Estudiante):boolean, añadir_a_actividad(a:Actividad), quitar_de_actividad(a:Actividad):boolean, añadir_a_titulacion(t:Titulacion), quitar_de_titulacion(t:Titulacion):boolean, define object type expediente extent Expedientes type tuple [ convocatoria: int, nota:int estudiante:set(nombre) inverse nombre:estudia_asignatura;] define object type Estudiante extent Estudiantes type tuple [ nombre: string, email: string, cursa: set (titulacion) invserse titulacion:cursada_por, estudia: set(asignatura) invserse expediente.asignatura:cursada_por;] operations añadir_estudiante(e:Estudiante); define object type Titulacion extent Titulaciones type tuple [ Denominacion: string, num_plazas: int; se_compone_de: set(Asignatura) inverse Asignatura:se_compone_de.asignatura, cursada_por: set(Estudiante) inverse Estudiante: cursa.Asignatura;] operations añadir_titulacion(t:Titulacion); define object type Actividad extent Actividades type tuple [ Nombre: string, organizada_por: set(Profe) inverse Profe:imparte, operations añadir_Actividad(t:Titulacion); select nombre.Profe from profesores p

where asingatura.se_compone_de.titulacion.num_plazas >=30 and titulacion.denominacion="Derecho"; select nombre.Estudiante from Estudiantes e where expediente.nota >= 7 and convocatoria = 1;

Formular las siguientes consultas sobre la base de datos oo anterior: 1. Utilizando la asociación expediente, seleccionar los profesores de las asignaturas de la titulación de ‘Derecho’ en las que se hayan matriculado más de 30 estudiantes.

select nombre.Profe from profesores p where asignatura.se_compone_de.titulacion.num_plazas titulacion.denominacion="Derecho";

>=30

and

2. Seleccionar los nombres de los estudiantes que siempre aprueban las asignaturas en primera convocatoria. select nombre.Estudiante from Estudiantes e where expediente.nota >= 7 and convocatoria = 1;

Ejercicio 3 Dado el siguiente esquema conceptual diseñar una base de datos orientada a objetos.

Formular las siguientes consultas sobre la base de datos oo anterior: define object type Cliente extent Clientes type tuple[ nombre: string, direccion: string, edad: int(3), participa: set(campaña) inverse campaña:se_aplica_a, paga: set(recibo) inverse recibo:pagado_por] operations añadir_cliente(c:cliente); define object type Venta extent Ventas type tuple [ fecha: date, plazos: string, num_telefonico: string, generada_por: set(campaña) inverse campaña:produce, emite: tuple[set(recibo) inverse recibo: pertenece_a, num_plazo:int, fecha_emision:date;] es_un_clasic: set(clasic) inverse clasic: vendido_en,

es_un_star: set(star) inverse star: vendido_en;] operations

nueva_venta(v:Venta);

define object type Clasic extent Clasics type tuple [ ID: int, se_compone_de: set(tuple: fijo:int, contrato:string;)] Operations añadir_star(cl:clasic); define object type star extent Stars type tuple [ ID: int, se_compone_de: set(tuple: duracion:int, contestador:string;)] Operations añadir_star(s:star); define object type Campaña extent Campañas type tuple [ nombre: string, duración: tuple [fecha_inicio: date, fecha_fin: date;] produce: set(venta) inverse venta:generada_por, se_aplica_a: set(cliente) inverse cliente:participa;] operations nueva_campaña(ca:campaña); define object type Recibo extent Recibos type tuple [ num_rec: int, banco: string, emite: tuple [fecha_emision: date, num_plazo: int;] proviene: set (venta) inverse venta:generada_por, pagada_por: tuple [set(cliente) inverse cliente:paga, fecha_pago:date;] Operations añadir_recibo(r:Recibo);

1. Para el cliente «Oscar Pérez Pérez», recuperar sus números de teléfono con su fecha de venta. select num_telefonico.venta, fecha.venta from venta v where nombre.cliente= Oscar Pérez Pérez

2. Recuperar la duración media de todas las tarjetas vendidas en el año 2010. select avg(duracion.se_compone_de) from star s where fecha.venta=2018

3. Para todos los clientes que hayan participado en la campaña llamada «talkmore», recuperar el nombre de aquellos que hayan pagado un recibo en la misma fecha en que fue emitido. select nombre from cliente where campaña.nombre=talk-more and recibo.fecha_pago = venta.fecha_emision

4. Recuperar todos los recibos del «Banco de Morella» ordenados por teléfonos. select num_rec from recibo where recibo.banco = Banco de Morella order by venta.num_telefono

EJERCICIO 4 Dado el siguiente esquema conceptual diseñar una base de datos orientada a objetos.

Formular las siguientes consultas sobre la base de datos oo anterior: define object type Jugador extent Jugadores type tuple[nombre:string, equipo:string, prima:string, lanza:set(Penalty) inverse Penalty:cobrado_por,

participa:set(Jugada) inverse Jugada:participo, seleccion:set(tuple[num_alineacion:int, Campeonato inverse Campeonato: seleccionados]);] operations nuevo_jugador(j:Jugador); define object type Gol extent Goles type tuple[minuto_int, distancia:string, marcado_en:set(Partido) inverse Partido:marcado, fue_un:set(Penalty) inverse Penalty:es_un;] operations validar_gol(v:Gol); define object type Jugada extent Jugadas type tuple[tipo:string, participo:set(Jugador) inverse Jugador:participa, es_un:set(Gol) inverse Gol:fue_un;] operations hacer_jugara(h:Jugada), detener_jugada(d:Jugada); define object type Penalty extent Penaltys type tuple[num_penalty:integer, cobrado_por:set(Jugador) inverse Jugador:lanza, es_un:set(Gol) inverse Gol:fue_un;] operations cobrar_penalty(p:Penalty); define object type Partido extent Partidos type tuple[fecha:fecha, equipos:set(tuple[equipo_l:string, equipo_v:string]), marcado:set(Gol) inverse Gol:marcado_en, pertenece_a:set(Campeonato) inverse Campeonato:se_compone_de;] operations iniciar_partido(p:Partido); define object type Campeonato extent Campeonatos type tuple[nombre:string, año:date, seleccion:set(Jugador) inverse Jugador:selecciom, se_compone_de:set(Partido) inverse Partido:pertenece_a;] operations iniciar_campeonato(i:Campeonato);

1. Seleccionar los jugadores que hayan lanzado más de 5 penaltis y que hayan participado en alguna jugada de gol tipo remate desde una distancia de más de 20 metros. select nombre from jugadores where count(gol.fue_un.penalty)=>5 and jugador.participa.jugada.tipo=remate

2. Seleccionar los nombres de los jugadores con una prima económica mayor. select nombre from jugadores order by prima desc limit 5; //"Los 5 mejores pagados"

Ejercicio 5 Dado el siguiente esquema conceptual diseñar una base de datos orientada a objetos.

define object type Persona extent Personas type tuple[nombre:string, dirección:set(tuple[calle:string, numero:int, ciudad:string]), fecha_nac:date(DD:MM:AA), operations agregar_persona(a:Persona), eliminar_persona(e:Persona); define object type Empleado inherit persona extent Empleados

type tuple [salario:float, num_emp:integer, dni:string, titulación:set(tuple[nombre:string, fecha:date(DD:MM:AA)]) operations agregar_empleado(a:Empleado), eliminar_empleado(e:Empleado); define object type Piloto inherit empleado extent Pilotos type tuple [licencia:string, horas_vuelo:date(HH:MM), pilotea:set(Modelo_avion) inverse Modelo_avion:pilota, operations agregar(a:Piloto), eliminar(e:Piloto); define object type Operario inherit empleado extent Operarios type tuple [turno:string, opera:set(Modelo_Avion) inverse Modelo_avion:experto, es_realizado_por: set(Servicio) inverse Servicio:mantiene, operations nuevo_operario(a:Operario), eliminar_operario(e:Operario); define object type Propietario extent Propietarios type tuple [num_acciones:int, le_pertenece:set(avion) inverse Avion:pertenece, pertenece_a:set(Empresa) inverse Empresa:pertenecen, es_un:set(Dueño) inverse Dueño:tienen] operations agregar_propietario(a:Propietario); eliminar_propietario(e:Propietario); define object type Dueño inherit persona extent Dueños type tuple[num_dueño:integer, tienen:set(Propietario) invese Propietario:es_un, operations agregar_dueño(a:Dueño), eliminar_dueño(e:Dueño); define object type Empresa extent Empresas type tuple[nombre:string, dirección:set(tuple[calle:string, numero:integer, ciudad:string]), telefono:string,

pertenece:set(Propietario) inverse Propietario:pertenece_a] operations agregar_empresa(a:Empresa), eliminar_empresa(e:Empresa); define object type Avion extent Aviones type tuple [num_reg:string, guardado_en:set(Hangar) inverse Hangar:guarda, pertenece:tuple[fecha_com:date, set(propietario) inverse propietario:le_pertenece], servicio_avion: set(Servicio) inverse Servicio:servicios_a_avion, es_modelo:set(Modelo_avion) inverse Modelo_avion:Avion;] operations agregar(a:Avion), eliminar(e:Avion), detener(d:Avion); define object type Modelo_avion extent Modelo_aviones type tuple [capacidad:string, peso:string. modelos:string modelo:set(Avion) inverse Avion:es_modelo, pilota:set(Piloto) inverse Piloto: pilotea, experto:set(Operario) inverse Operario:opera] operations agregar_modelo(a:Modelo), eliminar_modelo(e:Modelo); define object type Hangar extent Hangares type tuple [numero:integer, lugar:string, se_compone_de:tuple[set(Nave) inverse Nave:pertenece_a, set(taller) inverse taller:pertenece_a;] guarda:set(Avion) inverse Avion:guardado_en;] operations agregar_hangar(a:Hangar), eliminar_hangar(e:Hangar); define object type Nave extent Naves type tuple [capacidad:integer, pertenece_a:set(Hangar) inverse Hangar:se_compone_de;] operations agregar_nave(a:Nave), eliminar_nave(e:Nave);

define object type Taller extent Taller type tuple [herramienta:string, nombre:string, pertenece_a:set(Hangar) inverse Hangar:se_compone_de;] operations agregar_taller(a:Taller), eliminar_taller(e:Taller); define object type Servicio extent Servicios type tuple [hora:date(HH:MM:SS), código:tuple[codigo:string, fecha:date(MM/DD/AA);] mantiene:set(Operario) inverse Operario:es_realizado_por, servicioa_a_avion:set(Avion) inverse Avion:servicio_avion] operations agregar_servicio(a:Servicio), eliminar_aservicio(e:Servicio);

1. Recuperar el nombre de los modelos de los aviones que posee la empresa llamada ‘Aerosmith’. Select modelo From modelo_de_aviones Where empresa.nombre = “Aerosmith” 2. Recuperar el nombre de cada piloto junto con un número que indique cuántos modelos de aviones es capaz de pilotar. Select nombre from piloto.empleado.persona count(modelo_avion.pilotea) 3. Recuperar los aviones que pertenecen a más de 3 propietarios. Select num_reg From avion count(propietario.le_pertenece.avion) = >3 4. Recuperar cuántos aviones que puede pilotar ‘José Pérez’ agrupados por modelos. Select nombre from pilotos.empleados.personas modelo_aviones.pilota on pilotos.empleados.personas = count(modelo.modelo_aviones)

inner José

join Pérez

5. Recuperar las fechas y las horas de los servicios de los aviones que se guardan en el hangar número 7.

Select fecha, hora From servicios Where hangar.numero= 7 6. Visualizar el salario máximo y mínimo que un empleado puede tener. Select MAX (salario), MIN (salario) From empleados 7. Recuperar los nombres y las titulaciones de las parejas de operarios y pilotos que vivan en la misma calle de la misma ciudad. Select nombre from persona where pilotos.empleados.titulacion = operarios.empleados.titulacion pilotos.empleados.personas.direccion.calle operarios.empleados.personas.direccion.calle order by nombre asc;

and =

8. Calcular el peso y la capacidad media de los aviones. Select AVG (capacidad), AVG(peso) From modelo_de_aviones 9. Recuperar el número y la posición de cada hangar cuya nave tenga una capacidad superior a los 1000 metros cuadrados y ordenar por la capacidad de la nave. Select numero,lugar From hangares Where hangar.nave.capacidad = >1000 Order BY hangar.nave.capacidad ASC 10. Recuperar los pilotos que siempre vuelan en aviones con capacidad superior a los 200 pasajeros. Select nombre From piloto.empleado.persona Where modelo_de_aviones.capacidad >200