Está en la página 1de 21

ACTIVIDAD 11 | CONSULTAS EN SQL

BASES DE DATOS

ALVARO LLAMAS CARLES


GRADO EN INGENIERÍA DE ORGANIZACIÓN INDUSTRIAL
En colaboración con ALVARO MONGE CAMACHO y MILAGROS VILLENA PÉREZ
Contenido
INTRODUCCIÓN ............................................................................................................................. 2
1. Descripción del modelo ......................................................................................................... 3
2. Descripción de las Relaciones ............................................................................................... 4
3. Modelo entidad ..................................................................................................................... 6
4. Conclusiones finales .............................................................................................................. 7
5. Diagrama de paso a tablas (representación gráfica)............................................................. 7
6. Tablas con ejemplos (corregidos).......................................................................................... 9
7. Justificaciones...................................................................................................................... 10
8. Script ................................................................................................................................... 11
9. Consultas ............................................................................................................................. 17

pág. 1
INTRODUCCIÓN
Se nos plantea que se quiere realizar una base de datos para almacenar información sobre los
diferentes aspectos relacionados con la misma.

En particular, se desea almacenar información sobre los diferentes journals (revistas) que son
propiedad de la editorial y los editores que gestionan cada journal (un editor siempre está
asignado a la gestión de un journal en particular). El gran volumen de trabajo de los journals
hace que se necesiten, en general, varios editores para su gestión. De entre los editores, uno
es el jefe de cada journal, información que también se desea almacenar. Por el gran volumen
de trabajo que conlleva, un editor puede ser jefe de, a lo sumo, un journal.

Cada journal publica una serie de números anuales, de forma que cada número está
compuesto por un conjunto de artículos de investigación. Los artículos de investigación son
realizados por parte de los investigadores.

El objetivo es crear una aplicación de gestión para la dirección de la editorial. Al usar esa
aplicación, se debe poder conocer información acerca de:
- Los diferentes editores (pasaporte, nombre y apellidos, institución de Descripción de
pertenencia, ...), así como el journal en cuya gestión participa cada uno. La antigüedad laboral
del editor es importante.
- Los diferentes journals que son propiedad de la editorial (ISSN, nombre del journal, temática,
último valor del índice de impacto, si permite o no publicaciones de tipo open access,
periodicidad -mensual, trimestral o anual-, …), así como el editor que es jefe de cada journal.
- Los números publicados por cada journal (identificador, título, fecha de publicación, número
de páginas, si se trata o no de un número especial). Por supuesto, es importante conocer el
journal en el que se publica cada número. Para cada número, hay un editor responsable del
mismo, información que también es importante conocer. Un editor puede ser responsable de
varios números.
- Los diferentes artículos que contiene cada número (identificador, título, número de página
inicial, número de página final, DOI -URL donde se encuentra disponible-, resumen, si está
publicado o no en open access, fecha de recepción, fecha de revisión, ...). Por supuesto, es
necesario conocer el número en el que está contenido cada artículo.
- Los investigadores que realizan los diferentes artículos (Identificador ORCID, nombre y
apellidos, institución a la que pertenece, país, e-mail, ...). Un investigador puede realizar varios
artículos y viceversa. En un futuro, es posible que dicha base de datos también sirva de soporte
para la gestión de personal. Por eso, se desea almacenar información contractual de los
editores: fecha nacimiento, sueldo, etc.

Lo primero que hacemos es analizar la información anterior y poder identificar:

¿Entidades?  Sustantivos
¿Empresa debe ser una entidad?
¿Atributos?  sustantivos, relativos a entidades
¿Clave primaria? ¿Clave artificial?

pág. 2
¿Relaciones?  Verbos
¿Cardinalidades?
¿Grado de participación?
¿Relaciones redundantes?

Modelizar sólo aquellas entidades, atributos y relaciones de las que la organización desee
almacenar información para, por ejemplo, su posterior uso o consulta

No considerar entidades, atributos o relaciones innecesarias o redundantes

Luego nos tendremos que hacer las siguientes preguntas como por ejemplo:

¿Puede haber departamentos sin empleados? NO


¿Puede haber empleados que no pertenezcan a ningún departamento? NO

EMPLEADO DEPARTAMENTOS

La pregunta que hay que hacer: tiene que pertenecer obligatoriamente a algún
departamento? SI

La segunda pregunta que hay que hacer es: puede pertenecer a más de un departamento? NO

1. Descripción del modelo


El modelo diseñado consta de las siguientes entidades con sus atributos (los atributos
seleccionados como Clave Primaria están subrayados):
- Editores
o Atributos:
 Pasaporte
 Nombre
 Apellido
 Institución de pertenencia
 Antigüedad laboral
 Fecha de nacimiento
 Sueldo
 (journal en cuya gestión participa cada uno)
- Journals (Revistas)
o Atributos
 ISSN
 Nombre del journal
 Temática
 Último valor del índice de impacto
 2 subatributos: si permite o no publicaciones de tipo open Access
 Periodicidad: mensual, trimestral, anual,…
 (editor que es jefe de cada journal)
- Número publicado
o Atributos
 Identificador

pág. 3
 Título
 Fecha de publicación
 Número de páginas
 Si se trata o no de un número especial
 (conocer el journal en el que se publica cada número)
 (para cada número, hay un editor responsable del mismo,
información que es importante conocer
 (un editor puede ser responsable de varios números)
- Artículos que contiene cada número
o Atributos
 Identificador
 Título
 Número de página inicial
 Número de página final
 DOI (url donde se encuentra disponible)
 Si está publicado o no en open Access
 Fecha de recepción
 Fecha de revisión
 (conocer el número en el que está contenido cada artículo)
- Investigadores
o Atributos
 Identificador ORCID
 Nombre
 Apellido
 Institución al que pertenece
 País
 Email
 (un investigador puede realizar varios artículos y viceversa)

2. Descripción de las Relaciones


El detalle de los tipos de relaciones entre las distintas entidades queda:
- Gestiona: un editor siempre está asignado a la gestión de una revista en concreto
pero por lo general, pero habrá uno que lo gestione por tanto es 1:N
- Dirige: cada revista necesita un editor que lo dirija (uno y solo uno) pero no todos
los editores van a dirigir una revista, por lo que la cardinalidad será 1:1
- Publica: mínimo publica uno y lo normal es que se publiquen varios, por lo que la
cardinalidad será 1:N.
- Compone: todos los números anuales están integrados por varios artículos,
necesarios, por lo que la cardinalidad es 1:N
- Realiza: no todos los investigadores escriben en todos los artículos, pero si es
necesario que lo haga por lo menos uno, pudiendo intervenir varios, siendo la
cardinalidad, N:M
- Responsable: a su vez, en un segundo nivel, además de dirigir la revista un editor,
puede ser responsable de un número anual, por lo que la cardinalidad es 1:N

Hemos seguido las siguientes indicaciones para asignar los grados de participación:
Representan la forma en la que cada entidad participa en la relación a varios niveles.

Cada ocurrencia de la primera entidad puede no estar relacionada con ninguna ocurrencia de
la segunda  Participación opcional (0)

pág. 4
Cada ocurrencia de la primera entidad debe estar relacionada con alguna ocurrencia de la
segunda  Participación forzosa (1)

A la derecha, puede haber un 1 o una N.

Resumen:

(opcional (0) / obligatorio (1) , con una entidad como máximo (1) / con varias (N) )
Cuando hacemos la pregunta, lo ponemos en el otro extremo de la relación
Para la cardinalidad, se coge el máximo de cada participación

pág. 5
3. Modelo entidad
Nombre
Instrucciones_envío
Pasaporte Nombre

Email_ 1:1
Temática
contacto Apellido

(0,1) (1,1)
Dirige
Último valor
Institución_de
del índice de REVISTA EDITOR _ pertenencia
impacto

(1,1) (1,1) Gestiona (1,N) Fecha_Contratación


Publicaciones
open access (1,1)
1:N Sueldo
Periodicidad

ISSN Email
País

1:N Publica

Responsabiliza

Identificador
(0,n) 1:N

Título (1,N)

NUMERO
Fecha de
publicación Si es número
especial

Páginas (1,1)

1:N
Compone
Fecha_Acepta
ción
Fecha_rec
Publicado_ epción
open_access Identificador Nombre
(1,N) Fecha_ ORCID
revisión
Identificador
Apellido
ARTICULO Realiza INVESTIGADOR
Título (1,N) (1,N)
Institución
Número
página_inicial

pág. 6
N:M
Título_
DOI País
Universitario Email

Número_pág Fecha_Dispo Resumen


ina_final nible_online

4. Conclusiones finales
En este apartado se van a considerar varios comentarios que podrían haberse implementado
en el modelo o ideas de desarrollo futuro de la aplicación:

- Para poder simplificar y que no haya mucho dirigente y que se pueda llevar la
dirección de forma más centralizada, que un mismo editor pudiera dirigir una
revista y un número anual.
- Si se lleva una correcta identificación del trabajo realizado por cada editor y por
cada investigador, se podrían obtener muchísimas gráficas y estadísticas para
optimizar los recursos como por ejemplo, horas trabajadas en cada revista y en
cada número, horas realizadas por cada artículo, etc.
- Al ser tanto los editores como los investigadores empleados de la revista, posibles
bajas y situación laboral, con el fin de poder hacerle un seguimiento.
- Al querer en un futuro implementar en la base de datos tanto el sueldo como la
fecha de nacimiento lo que parece ser que se pretende llevar a cabo el
seguimiento de la rentabilidad (sueldo) y la frescura de la información que se
muestra en cada revista (fecha de nacimiento), ya que investigadores jóvenes
pueden estar más actualizados aunque si tiene más experiencia.

5. Diagrama de paso a tablas (representación gráfica)


Ahora partiendo del diagrama E/R del CASO PRÁCTICO 1, se pide realizar el diseño lógico (paso
a tablas) de la base de datos diseñada conceptualmente. En concreto, se deberán realizar los
siguientes contenidos:
a) Modelo Entidad-Relación corregido por el profesor.
b) Diagrama de paso a tablas (representación gráfica)
c) Tablas (en formato texto o tabular).
d) Ejemplos de contenido de todas las tablas (al menos 2 registros por tabla), de manera
que dichos ejemplos muestren un estado de la futura base de datos que sea
consistente.

Teniendo en cuenta las cardinalidades y los grados de participación de las relaciones entre las
diferentes entidades, obtenemos el diagrama que se muestra a continuación:

pág. 7
EDITOR (Pasaporte, Nombre, Apellido, Institución_de_pertenencia, Fecha_Contratación,
Sueldo, Email, País, ISSN_Revista gestiona (FK))

REVISTA (Instrucciones_envío, Nombre, Temática, Último_valor_del_índice_de_impacto,


Publicaciones_open_access, ISSN, Email_contacto, Periodicidad, Pasaporte_Director (FK))

NUMERO (Identificador, Título, Fecha_de_publicación, Páginas, Si_es_número_especial,


ISSN_Revista (FK), Pasaporte_Editor (FK))
.
ARTÍCULO (Fecha_Aceptación, Fecha_recepción, Publicado_open_access, Identificador, Título,
Número_página_inicial, Número_página_final, Fecha_Disponible_online, DOI, Fecha_revisión,
Resumen, Identificador_Número (FK))

INVESTIGADOR (Identificador ORCID, Nombre, Apellido, Institución, País, Email,


Título_Universitario)

REALIZA (Identificador_ORCID_Investigador (FK), Identificador_Artículo (FK))

Se va a iniciar la explicación con la entidad EDITOR que se enlaza con REVISTA, con una
relación (Dirige) tipo 1:1, por lo tanto, en este caso la clave primario de REVISTA se migra a
EDITOR en modo de Foreign Key (a partir de ahora FK. En este caso sería ISSN_Revista.

Continuando con la entidad REVISTA, se enlaza con EDITOR, con una relación (Gestiona) tipo
1:N y tiene otra relación con EDITOR (Dirige). Migra una KF de Editor (Pasaporte Director).

La siguiente entidad que se analiza es NÚMERO que se enlaza con REVISTA con una relación
(Publica) del tipo 1:N por lo que la clave primaria de REVISTA migra a NÚMERO, siendo
ISSN_Revista. También tiene una relación con EDITOR (Responsabiliza), del tipo 1:N, por tanto
migra la clave primaria de EDITOR a NÚMERO, siendo Pasaporte_Editor.

pág. 8
Luego la entidad ARTICULO, se relaciona con la entidad NÚMERO según la relación (Compone)
del tipo 1:N, por tanto migra la clave primaria de NÚMERO a ARTÍCULO, siendo
Identificador_Número.

Hay una relación que se transforma en “ENTIDAD”, debido a su tipo de relación. Por una parte
la entidad, ya que es una relación del tipo N:M, por lo tanto REALIZA se convierte en una
nueva tabla solamente copuesta con las claves primarias de las entidades que enlaza, en este
caso: Identificador_ORCID_Investigador e identificador_Artículo.

6. Tablas con ejemplos (corregidos)


A continuación se presentan las tablas con las claves primarias, los atributos y las FK (Foreign
Key) en los casos que aplique.
La primera tabla es la de la entidad EDITOR con sus atributos. La clave primaria es el pasaporte
del editor. Cuenta con una FK que ha migrado de la entidad REVISTA.

EDITOR (Pasaporte, Nombre, Apellido, Institución_de_pertenencia, Fecha_Contratación,


Sueldo, Email, País, ISSN_Revista gestiona (FK))
Veamos la tabla con algunos ejemplos en forma tabular:

Pasaporte Nombre Apellidos Institucion de Fecha_Contratación Sueldo Email Pais ISSN Revista
Pertenencia gestiona(FK)
PAB701544 Antonio Rodriguez Universidad 05/11/2014 2,200 arodriguez@gmail.com España 0317-8471
Caballero de Pamplona
ABP956721 Ana Fernandez Editorial 07/05/2012 2,500 afdelarosa@yahoo.com Colombia 1050-124X
de la Rosa Nuevas
Lecturas

Ahora veamos la taba que corresponde a la entidad NUMERO:

NUMERO (Identificador, Título, Fecha_de_publicación, Páginas, Si_es_número_especial,


ISSN_Revista (FK), Pasaporte_Editor_responsable (FK))

Vemos que la clave primaria es el identificador y que ha migrado una FK de la entidad EDITOR,
y otra FK de la entidad REVISTA

La tabla, en forma tabular y con algunos ejemplos se muestra a continuación:


Identificador Título Número Páginas Fecha_publicación Pasaporte_Editor_Responsable ISSN_Revista
Número Especial (FK) (FK)
20191120 El efecto del diesel en SI 15 20/11/2019 PAB701544 0317-8471
las enfermedades
cardiovasculares
20180516 Tendencias en Bases No 12 16/05/2018 ABP956721 1050-124X
de Datos

Ahora estudiemos la tabla que genera la entidad ARTICULO:

ARTÍCULO (Fecha_Aceptación, Fecha_recepción, Publicado_open_access, Identificador, Título,


Número_página_inicial, Número_página_final, Fecha_Disponible_online, DOI, Fecha_revisión,
Resumen, Identificador_Número_Compone (FK))

Vemos que para la entidad ARTICULO, la clave primaria es Identificador Articulo y tiene una FK
que migra de la entidad NUMERO y que es el Identificador_Numero.
Veamos la tabla de forma tabular con algunos ejemplos:

pág. 9
Fecha_ Fecha_ recepcion Publicado Identifi Titulo Número_págin Número_página_final Resumen Fecha_disp DOI Fecha_ Id
acepta _open_ac cador a_inicial onible_ revisio Numero
ción cess online n (FK)
10/11/ 05/11/2019 SI 1000 Reducción 5 10 El estudio trata los 25/11/20 http://dx.doi.org/10.11 15/11/ 20191120
2019 diesel ciudades diferentes… 19 45/1067268.1067287 2019
10/11/ 04/11/2019 NO 1100 Alternativas al 11 20 Gracias a diferentes 23/11/20 http://dx.doi.org/10.11 15/11/ 20191120
2019 diesel estudios… 19 49/1766268.4097387 2019

Ahora estudiamos la entidad INVESTIGADOR:

INVESTIGADOR (Identificador_ORCID, Nombre, Apellido, Institución, País, Email,


Título_Universitario)

Veamos ahora la tabla en forma tabular con algunos ejemplos:

ID ORCID Nombre Apellido Institución País Email Título_Universitario


AXG102569 Teresa Román El Diario España tromang@eldiario.com Licenciada en
Gonzalez Periodismo
QPR897546 Jimena Rodríguez Universidad de España jrodriguez@uvalencia.es Licenciada en
Perez Valencia Biología

Dado que la cardinalidad entre la entidad ARTICULO y la entidad INVESTIGADOR es N:M, la


relación REALIZA genera otra tabla que contendrá tan solo las claves primarias de las 2
entidades que relaciona que son, por tanto FK:

Id Articulo ID ORCID
20191120 AXG102569
20191120 QPR897546

Ahora estudiamos la última tabla que viene de la entidad REVISTA que tiene 2 relaciones con la
entidad EDITOR (dirige y gestiona) y una con la entidad NUMERO (publica)

REVISTA (Instrucciones_envío, Nombre, Temática, último_valor_del_índice_de_impacto,


Publicaciones_open_access, ISSN, Periodicidad, Email_contacto, Pasaporte_Director (FK))

En el caso de la entidad REVISTA, la clave primaria es el nombre y tiene una FK:


- La que relaciona con el editor que lo dirige (Pasaporte Director)
Instrucci Nombre Temática Ultimo_val Publicacio ISSN Periodicid Email Pasaporte
ones or_del_índ nes_open ad Director (FK)
envio ice_ _access
de_impact
o
Pago Bases de Tecnología 0.98 SI 63289714 Mensual bbdd@elperiodico.es ABP956721
online Datos s 5
Pago Diesel Medio 0.68 NO 11234567 Trimestral diesel@elpueblo.com PAB701544
contra Ambiente 8
reembols
o

7. Justificaciones
Para realizar las tablas se han tenido en cuenta las relaciones que pueda haber en el paso a
tablas de la actividad anterior y se intenta que las primeras tablas creadas no tengan
dependencias como foreign Keys (FK).

En el caso de no tener otra opción, se procedería a modificar posteriormente la tabla.

Se ha empezado con la tabla INVESTIGADOR ya que no tiene dependencias con otras tablas.

pág. 10
Luego se ha creado la tabla de REVISTA ya que su PK aparece en dos tablas y es una forma de
facilitar el diseño de la tabla. Posteriormente la de EDITOR ya que comparten información,
heredando mutuamente la primary key.

Posteriormente se ha creado la de NUMERO ya que hereda la PK de la tabla REVISTA ya creada


anteriormente y luego la de ARTÍCULO, que van heredando la tabla de forma seguida.

Para finalizar, se ha añadido la tabla REALIZA que se crea fácilmente ya que dispone de los
datos de las tablas anteriores.

Para crear las inserciones se ha seguido otro criterio, es decir, se ha empezado a insertar datos
en las tablas que tuvieran pocas relaciones para evitar conflictos y poco a poco se han ido
actualizando con otros inserts para ir completando todo satisfactoriamente.

8. Script
DROP SCHEMA IF EXISTS `Editorial` ;
CREATE SCHEMA IF NOT EXISTS `Editorial` DEFAULT CHARACTER SET utf8 ;
USE `Editorial`;

-- -----------------------------------------------------
-- Table `Editorial`.`Revista`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Revista` ;

CREATE TABLE IF NOT EXISTS `Editorial`.`Revista` (


`Instrucciones_envio` VARCHAR(50) NOT NULL,
`Nombre` VARCHAR(20) NOT NULL,
`Tematica` VARCHAR(20) NOT NULL,
`Ultimo_valor_del_indice_de_impacto`VARCHAR (4) NOT NULL,
`Publicado_open_access`VARCHAR (2) NOT NULL,
`ISSN` VARCHAR(20) NOT NULL,
`Periodicidad` VARCHAR (20) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
`Pasaporte_editor_director` VARCHAR(9) NOT NULL,
PRIMARY KEY (`ISSN`)
);
-- -----------------------------------------------------
-- Table `Editorial`.`Editor`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Editor`;

CREATE TABLE IF NOT EXISTS `Editorial`.`Editor` (


`Pasaporte_editor` VARCHAR(9) NOT NULL,
`Nombre` VARCHAR(20) NOT NULL,
`Apellidos` VARCHAR(40) NOT NULL,
`Institucion_de_pertenencia` VARCHAR(40) NOT NULL,
`Dia_contratacion` INT NOT NULL,
`Mes_contratacion` INT NOT NULL,
`Anno_contratacion` INT NOT NULL,
`Sueldo` INT NOT NULL,
`Email` VARCHAR(100) NOT NULL,

pág. 11
`Pais` VARCHAR(20) NOT NULL,
`ISSN_Revista_gestiona` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`Pasaporte_editor`),
FOREIGN KEY (`ISSN_Revista_gestiona`) REFERENCES `Editorial`.`Revista` (`ISSN`)
);

ALTER TABLE `Editorial`.`Revista`


ADD FOREIGN KEY (`Pasaporte_editor_director`) REFERENCES `Editorial`.`Editor`
(`Pasaporte_editor`);

-- -----------------------------------------------------
-- Table `Editorial`.`Número`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Numero`;

CREATE TABLE IF NOT EXISTS `Editorial`.`Numero` (


`Identificador_numero` VARCHAR(20) NOT NULL,
`Titulo` VARCHAR(100) NOT NULL,
`Dia_publicacion` INT NOT NULL,
`Mes_publicacion` INT NOT NULL,
`Anno_publicacion` INT NOT NULL,
`Paginas` INT NOT NULL,
`Numero_especial` VARCHAR(2) NOT NULL,
`Pasaporte_editor_responsable` VARCHAR(9) NOT NULL,
`ISSN_publicado` VARCHAR (20) NOT NULL,
PRIMARY KEY (`Identificador_numero`),
FOREIGN KEY (`ISSN_publicado`) REFERENCES `Editorial`.`Revista` (`ISSN`),
FOREIGN KEY (`Pasaporte_editor_responsable`) REFERENCES
`Editorial`.`Editor`(`Pasaporte_editor`)
);

-- -----------------------------------------------------
-- Table `Editorial`.`Artículo`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Articulo` ;

CREATE TABLE IF NOT EXISTS `Editorial`.`Articulo` (


`Identificador_articulo` VARCHAR(20) NOT NULL,
`Dia_aceptacion` INT NOT NULL,
`Mes_aceptacion` INT NOT NULL,
`Anno_aceptacion` INT NOT NULL,
`Dia_recepcion` INT NOT NULL,
`Mes_recepcion` INT NOT NULL,
`Anno_recepcion` INT NOT NULL,
`Publicado_open_access` VARCHAR(2) NOT NULL,
`Titulo` VARCHAR(50) NOT NULL,
`Numero_pagina_inicial` INT NOT NULL,
`Número_pagina_final` INT NOT NULL,
`Dia_disponible_online` INT NOT NULL,
`Mes_disponible_online` INT NOT NULL,
`Anno_disponible_online` INT NOT NULL,
`DOI` VARCHAR(50) NOT NULL,
`Dia_revision` INT NOT NULL,

pág. 12
`Mes_revision` INT NOT NULL,
`Anno_revision` INT NOT NULL,
`Resumen` VARCHAR(150) NOT NULL,
`Identificador_numero_compone` VARCHAR(20) NOT NULL,
PRIMARY KEY (`Identificador_articulo`),
FOREIGN KEY (`Identificador_numero_compone`) REFERENCES `Editorial`.`Numero`
(`Identificador_numero`)
);

-- -----------------------------------------------------
-- Table `Editorial`.`Investigador`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Investigador` ;

CREATE TABLE IF NOT EXISTS `Editorial`.`Investigador` (


`Identificador_ORCID` VARCHAR(20) NOT NULL,
`Nombre` VARCHAR(20) NOT NULL,
`Apellidos` VARCHAR(40) NOT NULL,
`Institucion_de_pertenencia` VARCHAR(40) NOT NULL,
`Pais` VARCHAR(20) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
`Titulo_universitario` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Identificador_ORCID`)
);

-- -----------------------------------------------------
-- Tabla intermedia`.`Realiza`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Realiza` (
`Identificador_articulo` VARCHAR(20) NOT NULL,
`Identificador_ORCID` VARCHAR(20) NOT NULL,
PRIMARY KEY (`Identificador_articulo`,`Identificador_ORCID`),
FOREIGN KEY (`Identificador_articulo`) REFERENCES `Editorial`.`Articulo`
(`Identificador_articulo`),
FOREIGN KEY (`Identificador_ORCID`) REFERENCES `Editorial`.`Investigador`
(`Identificador_ORCID`)
);

pág. 13
Se adjunta una captura de pantalla con la carga satisfactoria:

La ejecución del insert:

USE `Editorial`;

INSERT INTO Investigador VALUES ('AXG102569','Teresa','Román González','El


Diario','España','tromang@eldiario.com','Periodista');
INSERT INTO Investigador VALUES ('QPR897546','Jimena','Rodríguez Pérez','Universidad de
Valencia','España','jrodriguez@uvalencia.es','Biólogo');
INSERT INTO Investigador VALUES ('HUY987345','Enrique','Acevedo Mejía','Universidad de
Valencia','España','eam@uvalencia.es','Químico');
INSERT INTO Investigador VALUES ('ENT826455','Salomón','Alarcón Licona','Universidad de
Cartagena','España','sal@upct.es','ADE');
INSERT INTO Investigador VALUES ('MNE525374','Hipólito','Alatriste Pérez','Universidad de
Murcia','España','hap@um.es','Graduado');
INSERT INTO Investigador VALUES ('KUY879275','Adolfo','Alderete Porras','Universidad de
Coruña','España','aap@uc.es','Técnico');
INSERT INTO Investigador VALUES ('IPR854637','Raúl','Angulo Garfias','Universidad de
Alicante','España','rag@ualc.es','Técnico');

INSERT INTO Editor


(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('ABP956721','Antonio','Rodríguez
Caballero','Universidad de Pamplona',05,11,2014,'2.200','arodriguez@gmail.com','España');
INSERT INTO Editor
(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr

pág. 14
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('DJG875234','Ana','Fernández De la
Rosa','Editorial Nuevas Lecturas',07,05,2012,'2.500','adelarosa@yahoo.es','Colombia');
INSERT INTO Editor
(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('GJH886472','Socorro','Alonso
Navarro','Editorial Razones',11,05,2013,'1.800','salonso@yahoo.es','Perú');
INSERT INTO Editor
(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('LKL986434','Guillermo','Alvarado
Mendoza','Editorial España',20,05,2010,'1.500','galvarado@yahoo.es','Madrid');
INSERT INTO Editor
(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('NVY645234','Javier','Antemate
Chigo','Editorial Resurrección',06,11,2015,'2.000','jantemate@yahoo.es','Colombia');
INSERT INTO Editor
(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('MKM823145','Felipe','Altamirano
García','Editorial Razón',26,05,2018,'2.800','faltamirano@yahoo.es','Colombia');
INSERT INTO Editor
(Pasaporte_editor,Nombre,Apellidos,Institucion_de_pertenencia,Dia_contratacion,Mes_contr
atacion,Anno_contratacion,Sueldo,Email,Pais) VALUES ('MGR638463','Lorena','Amaya
Salvador','Editorial Alegría',30,06,2011,'1.400','lamaya@yahoo.es','Colombia');

INSERT INTO Revista VALUES ('Pago online','Bases de datos','Tecnologías','0.98','Si','0317-


8471','Mensual','bbdd@elperiodico.es','ABP956721');
INSERT INTO Revista VALUES ('Contra reembolso','Medio
ambiente','Tecnologías','0.99','No','1050-124X','Trimestral','mamb@larazon.es','DJG875234');
INSERT INTO Revista VALUES ('Pago online','Economía','Cultural','0.80','Si','8765-
645G','Semestral','economiatotal@universidadonline.es','GJH886472');
INSERT INTO Revista VALUES ('Contra reembolso','Política','Cultural','0.76','No','9843-
724G','Mensual','polit.cult@univ.cercana.es','LKL986434');
INSERT INTO Revista VALUES ('Contado','Deportes','Social','0.90','Si','9863-
123M','Anual','deport.social@univ.relacional.es','NVY645234');
INSERT INTO Revista VALUES ('Contra reembolso','Electrónica','Tecnologías','0.78','No','3655-
834T','Semestral','elec.tecnology@siporsi.com','MKM823145');
INSERT INTO Revista VALUES ('Contra reembolso','Information
Science','Tecnologías','0.94','Si','9364-
746G','Mensual','electronicaparatodos@univ.colum.com','MGR638463');

UPDATE Editor SET `ISSN_Revista_gestiona`='0317-8471' WHERE Editor.`Pasaporte_editor` =


'ABP956721';
UPDATE Editor SET `ISSN_Revista_gestiona`='1050-124X' WHERE Editor.`Pasaporte_editor` =
'DJG875234';
UPDATE Editor SET `ISSN_Revista_gestiona`='8765-645G' WHERE Editor.`Pasaporte_editor` =
'GJH886472';
UPDATE Editor SET `ISSN_Revista_gestiona`='9843-724G' WHERE Editor.`Pasaporte_editor` =
'LKL986434';
UPDATE Editor SET `ISSN_Revista_gestiona`='9863-123M' WHERE Editor.`Pasaporte_editor` =
'NVY645234';
UPDATE Editor SET `ISSN_Revista_gestiona`='3655-834T' WHERE Editor.`Pasaporte_editor` =
'MKM823145';
UPDATE Editor SET `ISSN_Revista_gestiona`='9364-746G' WHERE Editor.`Pasaporte_editor` =
'MGR638463';

pág. 15
INSERT INTO Numero VALUES ('20191120', 'El efecto del diesel en las enfermedades
cardiovasculares',20,11,2019,'15','SI','ABP956721','0317-8471');
INSERT INTO Numero VALUES ('20180516', 'Tendencias en Bases de
Datos',16,05,2018,'12','NO','DJG875234','1050-124X');
INSERT INTO Numero VALUES ('45453456', 'Cómo afecta la economía en la
sociedad',20,12,2019,'13','SI','GJH886472','8765-645G');
INSERT INTO Numero VALUES ('24565447', 'El nuevo presidente en
funciones',20,11,2019,'11','NO','LKL986434','9843-724G');
INSERT INTO Numero VALUES ('35886866', 'Los logros de Rafa
Nadal',20,11,2016,'20','NO','NVY645234','9863-123M');
INSERT INTO Numero VALUES ('57906535', 'Nuevas baterías de
grafeno',20,02,2019,'21','SI','MKM823145','3655-834T');
INSERT INTO Numero VALUES ('46679975', 'El coche que funciona con
agua',20,11,2012,'17','SI','MGR638463','9364-746G');

INSERT INTO Articulo VALUES ('1.000', 05,11,2019, 25,11,2019, 'SI', 'Reducción diesel
ciudades', '5', '10', 15,11,2019, 'http://dx.doi.org/10.1145/1067268.1067287',20,11,2019, 'El
estudio trata los diferentes', '20191120');
INSERT INTO Articulo VALUES ('1.100', 04,11,2018, 23,11,2019, 'NO', 'Alternativas al
diesel','11','20',23,11,2019,'http://dx.doi.org/10.1149/1766268.4097387',15,11,2019,'Gracias
a diferentes estudios','20180516');
INSERT INTO Articulo VALUES ('1.200', 05,11,2019, 25,11,2019, 'SI', 'Aumento del
PIB','21','25',25,11,2019,'http://dx.doi.org/10.7654/1067268.7893456',16,12,2019,'El estudio
trata los diferentes','45453456');
INSERT INTO Articulo VALUES ('1.150', 05,10,2019, 25,10,2019,'SI', 'Tiempo de un
presidente','26','30',25,11,2019,'http://dx.doi.org/10.3456/1067268.8734568',15,12,2019,'Se
puede decir que...','24565447');
INSERT INTO Articulo VALUES ('1.800', 05,11,2019, 30,11,2019, 'SI', 'Copas
conseguidas','31','32',30,11,2019,'http://dx.doi.org/10.6532/1067268.6534765',15,12,2019,'H
a sido un gran campeón...','35886866');
INSERT INTO Articulo VALUES ('1.900', 05,06,2018, 10,07,2018, 'SI', 'El futuro ya
llegó','33','35',05,08,2018,'http://dx.doi.org/10.1256/1067268.5632156',10,08,2018,'Va a
revolucionar el pensamiento...','57906535');
INSERT INTO Articulo VALUES ('1.750', 05,11,2012, 10,11,2012, 'SI', 'Information
Science','36','68',15,11,2012,'http://dx.doi.org/10.7895/6598675.1067287',15,12,2012,'El
transporte en si...','46679975');

INSERT INTO Realiza VALUES ('1.000','AXG102569');


INSERT INTO Realiza values ('1.100','QPR897546');
INSERT INTO Realiza VALUES ('1.200','HUY987345');
INSERT INTO Realiza VALUES ('1.150','ENT826455');
INSERT INTO Realiza VALUES ('1.800','MNE525374');
INSERT INTO Realiza VALUES ('1.900','KUY879275');
INSERT INTO Realiza VALUES ('1.750','IPR854637');

Y a continuación una captura del script de Insert de los datos:

pág. 16
9. Consultas
Las consultas se realizarán sobre la base de datos creada en el CPIII cuyo script ha sido
modificado según la corrección del profesor y se han añadido elementos al insert para facilitar
las consultas. Ambos archivos serán adjuntados en la entrega.

1. Listado de editores de la editorial, donde aparecerá el nombre del journal en el que presta
sus servicios

Para esta consulta, se necesitarán los atributos de la tabla Editor como de la tabla Revista:

SELECT Editor.nombre AS 'Editor', Revista.nombre AS 'Revista donde presta los servicios'


FROM Editor, Revista
WHERE Revista.ISSN = Editor.ISSN_Revista_gestiona

2. Listado de los journals de la editorial, ordenados por índice de impacto (aparecerán primero
los de mayor índice de impacto)

En esta consulta necesitaremos tanto los atributos de la tabla Revista , tanto el nombre como
el último valor del índice de impacto, donde estos últimos se ordenarán de mayor a menor

pág. 17
impacto, por lo que para eso utilizamos el comando ORDER BY… DESC, donde DESC indica que
es en orden descendiente:

SELECT Revista.nombre AS 'Revistas', Revista.Ultimo_valor_del_indice_de_impacto AS 'Índice


de impacto'
FROM Revista
ORDER BY Revista.Ultimo_valor_del_indice_de_impacto DESC;

3. Listado de los journals de la editorial, junto con el número (cantidad) de editores que
gestionan cada uno. Se ordenarán los journals de menor a mayor número de editores

Tenemos que llamar tanto a la tabla Revista como a la tabla Editor, de tal manera que
listaremos los nombres de las revistas y el número de editores, agrupados por el nombre del
editor usando el comando GROUP BY y en orden descendente según ORDER BY… DESC:

SELECT Revista.nombre AS 'Journals de la editorial', Editor.nombre AS 'Número de editores',


count(*)
FROM Revista, Editor
WHERE (Revista.ISSN = Editor.ISSN_Revista_gestiona)
GROUP BY Editor.nombre
ORDER BY 2 DESC;

4. Listado de los investigadores que hayan realizado algún artículo de más de 35 páginas
publicado en algún número del journal "Information Sciences", y cuyo editor responsable
(del número) pertenezca a la misma institución que el investigador

pág. 18
En este caso hemos tenido que modificar los datos ya que ninguna revista tenía el nombre de
“Information Sciences”, filtrando por los artículos que tienen más de 35 páginas (también
hemos tenido que modificar datos) y que coincida con el nombre de la revista “Information
Science”:

SELECT DISTINCT Investigador.nombre AS 'Investigadores'


FROM Investigador, Realiza, Articulo, Revista
WHERE (Investigador.Identificador_ORCID = Realiza.Identificador_ORCID) AND
(Articulo.Identificador_articulo=Realiza.Identificador_articulo)
AND (Articulo.Número_pagina_final>35) AND (Revista.Nombre='Information Science');

5. Listado de artículos Open Access con 4 o más autores, contenidos en números de journals
con periodicidad trimestral gestionados por menos de 10 editores

Llamamos a las tablas, Artículo, Revista, Número, Investigador y Editor, de tal forma que
únicamente se mostrarán tanto los artículos como los investigadores y los editores, que
cumplan que que Open Access sea SI, Periodicidad Trimestral y además, menos de 10 editores
con las sentencias que hay entre los AND:

SELECT Articulo.Titulo AS 'Artículos', Investigador.Identificador_ORCID,


Editor.Pasaporte_editor
FROM Articulo, Revista, Numero, Investigador, Editor
WHERE (Investigador.Identificador_ORCID = Articulo.Identificador_articulo)
AND (Numero.Identificador_numero = Articulo.Identificador_numero_compone)
AND (Revista.ISSN = Numero.ISSN_publicado)
AND (Revista.ISSN = Editor.ISSN_Revista_gestiona)
AND (Articulo.Publicado_open_access = 'SI')
AND (Revista.Periodicidad = 'Trimestral')
AND (Editor.Pasaporte_editor <10);

6. Sueldo medio de los editores, jefes de algún journal con algún número especial publicado en
2018

pág. 19
En esta consulta nos piden el sueldo medio que obtendremos con la sentencia “avg” que
calcula la media del atributo sueldo seleccionado. Para ello llamamos a las tablas “Editor”,
“Revista” y “Numero”

SELECT avg(Sueldo) AS 'Sueldo medio'


FROM EDITOR, REVISTA, NUMERO
WHERE (EDITOR.Pasaporte_editor = REVISTA.Pasaporte_editor_director)
AND (NUMERO.ISSN_publicado = REVISTA.ISSN)
AND (NUMERO.Anno_publicacion = '2019')
AND (NUMERO.Numero_especial = 'SI');

7. Número medio de artículos por número (se pide un único valor)

Para resolver esta consulta, anidamos una consulta en otra. Con la primera pedida en la
consulta con avg que resolverá la media de los artículos realizados por número y con la
anidada devolverá la lista necesaria para calcular esa media.

Luego en la consulta anidada se usa el comando count para calcular la suma de los artículos.
Para ello se llama a la tabla Artículo y Número, relacionándose. Agrupamos los resultados por
el nombre medio de los artículos por número y lo asociamos al nombre nueva_tabla para
poder llamar a la consulta que está por encima:

SELECT avg(nueva_tabla.Artículos) AS 'Número medio de artículos por número' FROM


(SELECT count(*) AS Artículos
FROM Articulo, Numero
WHERE (Articulo.Identificador_numero_compone = Numero.Identificador_numero)
GROUP BY Numero.Identificador_numero) AS nueva_tabla;

pág. 20

También podría gustarte