Optimización de Base de Datos SQL: Consultas Avanzadas, Vistas y Modificación de Esquema
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,19 KB
Consultas SQL y Vistas de Base de Datos
Consultas Específicas
Grupo más emitido en radios y su total de emisiones
Consulta para identificar el grupo musical con el mayor número de emisiones en radio, mostrando su nombre y el recuento total de emisiones.
SELECT GRUPO.nombre, COUNT(EMISION.tema) AS TotalEmisiones
FROM GRUPO
JOIN VINILO ON GRUPO.nombre = VINILO.grupo
JOIN TEMA ON VINILO.ISVN = TEMA.LP
JOIN EMISION ON TEMA.codigo = EMISION.tema
GROUP BY GRUPO.nombre
ORDER BY COUNT(EMISION.tema) DESC
FETCH FIRST 1 ROWS ONLY;
Definición de Vistas
Creación de vistas para simplificar el acceso a datos específicos y mejorar la legibilidad de las consultas.
Vista de nombres y años de fundación de grupos
Define una vista que expone el nombre y el año de fundación de cada grupo musical.
CREATE VIEW VistaGruposFundacion AS
SELECT nombre, anyoFundacion
FROM GRUPO;
Vista de nombres y direcciones de radios
Define una vista que muestra el nombre y la dirección de cada estación de radio.
CREATE VIEW VistaRadios AS
SELECT nombre, direccion
FROM RADIO;
Vista de grupos y número de vinilos publicados
Define una vista que relaciona cada grupo con el número total de vinilos que ha publicado.
CREATE VIEW VistaGruposVinilos AS
SELECT GRUPO.nombre, COUNT(VINILO.ISVN) AS TotalVinilos
FROM GRUPO
JOIN VINILO ON GRUPO.nombre = VINILO.grupo
GROUP BY GRUPO.nombre;
Actualización y Modificación de Esquema de Base de Datos
Operaciones de manipulación de datos (DML) y definición de datos (DDL) para gestionar y adaptar la estructura de la base de datos.
Operaciones de Manipulación de Datos (DML)
Intento de eliminación de datos
Ejemplos de sentencias DELETE
que intentan eliminar registros específicos, posiblemente sujetos a restricciones de integridad referencial.
Intento de eliminación del vinilo 6000000001 (Rosalía)
DELETE FROM VINILO WHERE ISVN = 6000000001;
Intento de eliminación de la radio RNE3
DELETE FROM RADIO WHERE nombre = 'RNE3';
Intento de eliminación de la discográfica RCA
DELETE FROM DISCOGRAFICA WHERE nombre = 'RCA';
Actualización de registros existentes
Incremento de dos minutos en 'fechaHora' para emisiones del 01/04/1981
Actualiza el atributo
fechaHora
de todas las emisiones de radio ocurridas el 1 de abril de 1981, incrementándolo en dos minutos.UPDATE EMISION SET fechaHora = fechaHora + INTERVAL '2' MINUTE WHERE TRUNC(fechaHora) = TO_DATE('01-04-1981', 'DD-MM-YYYY');
Duplicación de copias de lanzamiento para LPs del grupo Queen
Duplica el número de copias de lanzamiento para todos los LPs asociados al grupo Queen.
UPDATE LP SET copiasLanzamiento = copiasLanzamiento * 2 WHERE ISVN IN (SELECT VINILO.ISVN FROM VINILO WHERE VINILO.grupo = 'Queen');
Modificaciones de Esquema (DDL)
Sentencias CREATE TABLE
y ALTER TABLE
para adaptar la estructura de la base de datos a nuevos requisitos funcionales.
Adición de tabla para miembros de grupos y gestión de composición
Crea una nueva tabla MIEMBRO
para registrar información sobre los integrantes de los grupos musicales, permitiendo una gestión flexible de la composición de las bandas.
CREATE TABLE MIEMBRO (
idMiembro NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
nombre VARCHAR2(120),
fechaNacimiento DATE,
paisNacimiento VARCHAR2(120),
grupo VARCHAR2(120),
FOREIGN KEY (grupo) REFERENCES GRUPO(nombre)
);
Modificación de esquema para múltiples puestos en ranking semanal
Introduce una nueva tabla RANKING_EXTENDIDO
para soportar la posibilidad de que un vinilo ocupe múltiples posiciones en el ranking semanal, o para registrar el historial de posiciones.
CREATE TABLE RANKING_EXTENDIDO (
ISVN NUMBER(10),
anyo NUMBER(4),
semana NUMBER(2),
posicion NUMBER(3),
PRIMARY KEY (ISVN, anyo, semana, posicion)
);
Modificación de esquema para múltiples grupos por vinilo
Crea una tabla de relación VINILO_GRUPOS
para permitir que un mismo vinilo sea asociado a múltiples grupos musicales, resolviendo una relación de muchos a muchos.
CREATE TABLE VINILO_GRUPOS (
ISVN NUMBER(10),
grupo VARCHAR2(120),
PRIMARY KEY (ISVN, grupo),
FOREIGN KEY (ISVN) REFERENCES VINILO(ISVN),
FOREIGN KEY (grupo) REFERENCES GRUPO(nombre)
);
Solución para prevenir inconsistencias de datos
Añade restricciones de unicidad y claves foráneas para asegurar la integridad referencial y evitar datos inconsistentes entre las tablas SENCILLO
y TEMA
.
ALTER TABLE SENCILLO ADD UNIQUE (ISVN, ISVNLP);
ALTER TABLE TEMA ADD FOREIGN KEY (sencillo, LP)
REFERENCES SENCILLO (ISVN, ISVNLP);