Laboratorio Numero dos

Laboratorio Nùmero dos 

Para ser entregado a mas tardar

el 15 de enero del 2023.


Base de datos II

Uso de bases de datos


Práctica 2: El lenguaje SQL II


En la primera parte de la práctica hemos realizado consultas y modificaciones sobre los datos

utilizando SQL. En esta segunda parte, sobre la misma base de datos, añadiremos lógica dentro de la base de datos utilizando procedimientos almacenados y disparadores.

Para la correcta ejecución de la segunda parte de la práctica, es necesario volver a crear la base de datos de nuevo e insertar otra vez los datos iniciales utilizando los scripts que se proporcionan junto a este enunciado. Este paso es necesario debido a la introducción de los cambios siguientes en el esquema de la BD respecto a la primera parte de la práctica:

Creación de una nueva tabla llamada REPORT_ALBUM, con las columnas id_album,

num_songs, num_composers, num_members_alive, y longest_song_title. 

La columna id_album corresponde al identificador del álbum y es clave primaria. El resto de columnas se calculan en 

relación al álbum. Así pues, num_songs es el número de canciones que tiene el álbum en

cuestión, num_composers es el número de compositores diferentes que han compuesto

canciones en dicho álbum, num_members_alive es el número de miembros del grupo autor de

dicho álbum que todavía están vivos, y longest_song_title es el nombre de la canción del

álbum en cuestión que tiene una duración mayor, teniendo en cuenta que en el caso que haya

más de una canción con la misma longitud del título, se escogerá la primera por órden

alfabético.

Tabla ALBUM: se ha añadido el atributo album_duration que representa la duración total de

las canciones que forman parte del álbum.

Encontraréis las sentencias de creación y modificación de estas tablas en el archivo create_db.sql.

Nota importante: El SQL implementado en PostgreSQL puede aceptar diferentes variantes de

sintaxis, que además pueden diferir según la versión que instaléis, y que pueden ser o no SQL

estándar. Evitad (excepto que se indique lo contrario) utilizar sentencias de este tipo, y concentraros

en las que se explican en los módulos didácticos. Si usáis sentencias SQL estándar vuestro código

funcionará en cualquier SGBD.





Pregunta 1 (50 % puntuación)

Enunciado

Se pide que creéis un procedimiento almacenado que, dado un año, actualice los datos que hacen

referencia al álbum o álbumes publicados en dicho año y los almacene en la tabla REPORT_ALBUM.

Dicha tabla se habrá creado con la ejecución del archivo create_db.sql, el cual deberéis ejecutar en

primer término.

Si ya existe una entrada en la tabla para el álbum (id_album), ésta se tendrá que modificar con los

nuevos valores. Además de guardarlo en la tabla, el procedimiento devolverá el resultado del report.

Se tendrá que informar al usuario con un mensaje específico cuando no exista ningún álbum publicado

en el año especificado.

La firma del procedimiento pedido y el tipo que devolverá son los siguientes:

CREATE OR REPLACE FUNCTION update_report_album(p_year INTEGER)

RETURNS SETOF REPORT_ALBUM_TYPE

donde REPORT_ALBUM_TYPE es de tipo:

CREATE TYPE REPORT_ALBUM_TYPE AS (

t_id_album INTEGER,

t_num_songs INTEGER,

t_num_composers INTEGER,

t_num_members_alive INTEGER,

t_longest_song_title VARCHAR(255)

);

Criterios de evaluación

Las propuestas de solución que no se puedan ejecutar, es decir las que den error de sintaxis,

no serán evaluadas.

Se valorará positivamente el uso de sentencias SQL estándar, al margen de otros elementos

que se puedan indicar en el enunciado.

Para obtener la máxima nota, el código SQL de vuestra solución tiene que ser eficiente. Por

ejemplo, se valorará negativamente realizar más joins de los necesarios.

Para obtener la máxima nota, la propuesta de solución tiene que incluir pruebas que cubran

todas las posibles situaciones descritas en el enunciado. Por ejemplo, se deberían cubrir todas

las posibles situaciones de error.

Para obtener la máxima nota, la propuesta de solución tiene que incluir los resultados,

mediante el uso de capturas de pantalla o cualquier otro mecanismo similar.


Pregunta 2 (50 % puntuación)

Enunciado

En la tabla ALBUM tenemos la columna album_duration con el objetivo de almacenar la duración

total de las canciones que forman parte de dicho álbum.

Cread un disparador o disparadores, sobre la tabla o tablas que sean necesarias, de manera que se

mantenga correctamente actualizada la columna album_duration de la tabla ALBUM.

En concreto, se pide que esta columna refleje los valores pedidos y que éstos siempre se mantengan

actualizados en función de los cambios.

Podemos suponer que los usuarios o programas nunca actualizarán directamente la columna

album_duration de la tabla ALBUM, y que, en el momento de insertar una nuevo álbum, el valor

de la columna album_duration será cero.

Nota: En el siguiente enlace encontraréis información sobre operadores y funciones de Fecha y Hora.

https://www.postgresql.org/docs/9.4/functions-datetime.html

Criterios de evaluación

Las propuestas de solución que no se puedan ejecutar, las que den error de sintaxis, no serán

evaluadas.

Se valorará positivamente el uso de sentencias SQL estándar, al margen de otros elementos

que se puedan indicar en el enunciado.

Para obtener la máxima nota, el código SQL de vuestra solución tiene que ser eficiente. Por

ejemplo, se valorará negativamente realizar más joins de los necesarios.

Para obtener la máxima nota, la propuesta de solución tiene que incluir pruebas que cubran

todas las posibles situaciones descritas en el enunciado.

Para obtener la máxima nota, la propuesta de solución tiene que incluir los resultados,

mediante capturas de pantalla o de alguna forma similar.

Para obtener la máxima puntuación, el código que actualice album_duration tiene que

pertenecer a una única función.






Comentarios

Entradas populares de este blog

Laboratorio Uno