Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BASES DE DATOS
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.
¿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
Luego nos tendremos que hacer las siguientes preguntas como por ejemplo:
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
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)
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)
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
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
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.
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))
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.
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
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
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
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)
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).
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.
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` ;
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`)
);
-- -----------------------------------------------------
-- Table `Editorial`.`Número`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Numero`;
-- -----------------------------------------------------
-- Table `Editorial`.`Artículo`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Editorial`.`Articulo` ;
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` ;
-- -----------------------------------------------------
-- 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:
USE `Editorial`;
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');
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');
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:
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:
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:
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”:
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:
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”
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:
pág. 20