Está en la página 1de 13

BASES DE DATOS 2018/2019

Proyecto final de curso


Diseño de la Base de Datos de la Facultad de Filosofía de la Universidad de
Salamanca

Table of Contents
Introducción ................................................................................................................................. 2
Entidades .................................................................................................................................. 2
Relaciones................................................................................................................................. 2
Exposición del diagrama Entidad/Relación .................................................................................. 3
Exposición del modelo relacional ................................................................................................. 4
Normalización del modelo............................................................................................................ 5
Creación de la base de datos ........................................................................................................ 6
Observaciones .......................................................................................................................... 6
Modificaciones de las tablas respecto del diagrama E/R ..................................................... 6
Inserción de valores.............................................................................................................. 6
Sentencias DDL Y DML .................................................................................................................. 7
Búsquedas de datos ................................................................................................................. 7
Triggers, procedimientos y funciones .................................................................................... 10

ALEJANDRO LOZANO [1 DAW] 1


BASES DE DATOS 2018/2019

Introducción

La facultad de Filosofía de la Universidad de Salamanca desea informatizar una serie de


datos relativos al personal que trabaja en ella y a los espacios de los que dispone. En
concreto, se desean registrar los siguientes aspectos

Entidades

§ Personal Docente e Investigador (PDI)


o De todos se quiere guardar el identificador de PDI, el nombre, apellidos,
DNI y categoría (ayudante doctor, contratado doctor, etc.)
§ Personal de Administración y Servicios (PAS)
o De todos se quiere guardar el identificador de PAS, nombre, apellidos y
DNI
§ Cursos (primero, segundo, tercero…)
o Se quiere guardar el número del curso como clave única, el año académico
al que corresponden, el número de asignaturas que lo forman y el número
de alumnos que lo componen
§ Despachos
o Se quiere guardar el número del despacho como identificador único, si
dispone de ordenador y si dispone de impresora
§ Aulas
o Se quiere guardar el número del aula, los puestos para alumnos de los que
dispone y su extensión en m2

Relaciones

§ El PDI puede ser contratado o funcionario


o Del PDI contratado se quiere saber, además, el número de horas
semanales por las que está contratado
o Del PDI funcionario se quiere saber, además, su número de sexenios de
investigación y sus horas de dedicación docente
§ Varios PDI pueden dar clase a varios cursos, y viceversa
§ Hay un despacho asignado a cada miembro del PDI en exclusiva, aunque puede
que haya despachos vacíos
§ El PAS puede ser secretario o conserje
§ Un secretario administra las gestiones de varios PDI, y un PDI puede encargar a
varios secretarios que gestionen sus tareas
§ Los conserjes ordenan los despachos y limpian las aulas
§ En un aula se pueden impartir varios cursos, y varios cursos pueden impartirse
en diferentes aulas

ALEJANDRO LOZANO [1 DAW] 2


BASES DE DATOS 2018/2019

Exposición del diagrama Entidad/Relación

ALEJANDRO LOZANO [1 DAW] 3


BASES DE DATOS 2018/2019

Exposición del modelo relacional1

PDI (DNI_PDI, Nombre, Apellidos, Categorías, Tipo)


BC;MC
PDI_Contratado (Código_Contratado, DNI_PDI (FK), Horas semanales)
BC;MC
PDI_Funcionario (Código_Funcionario, DNI_PDI (FK), Número de sexenios, Dedicación
docente)
BC;MC
Despachos (Número de despacho, Ordenador, Impresora, DNI_PDI (FK))
BR;MR à Nos interesa guardar un histórico de los profesores que han estado en
cada despacho
PAS (DNI_PAS, Nombre, Apellidos, Tipo)
PAS_Secretario (ID_Secretario, DNI_PAS (FK))
BC;MC
PAS_Conserje (ID_Conserje, DNI_PAS (FK))
BC;MC
Cursos (Código del curso, Nivel del curso, Año académico, Número de asignaturas,
Número de alumnos)

Aulas (Número del aula, Puestos para alumnos; Extensión)


PDI_Cursos (Código_Impartido, DNI_PDI (FK), Código del curso (FK))
BC;MC
PDI_Secretario (Código_gestión, DNI_PDI (FK), ID_Secretario (FK))
BC;MC
Cursos_Aulas (Código_edición_curso, Código del curso (FK), Número del aula (FK))
BC;MC
Conserje_Aulas (Código_Limpieza_Aula, ID_Conserje (FK) Número del aula (FK))
BC;MC
Conserje_Despachos (Código_Tarea_Despacho, Número_Despacho (FK), ID_Conserje
(FK))

1
En el documento de Word es difícil mostrar los grafos relacionales. Por ello señalamos que en el modelo
relacional se trazan grafos (flechas) que van desde las FK de las tablas que las tengan hacia la PK de la tabla
con la que se relacionan.
ALEJANDRO LOZANO [1 DAW] 4
BASES DE DATOS 2018/2019

Normalización del modelo

Dado que esta base de datos se ha construido con las reglas del modelo E/R, no debería
presentar problemas dependencia funcional, redundancia de datos o anomalías de
actualización, borrado o inserción. Asumimos que este modelo se encuentra en:

§ Primera Forma Normal: todos los atributos de todas las tablas toman valores
atómicos
§ Segunda Forma Normal: para confirmar 2FN, hemos introducido una clave
primaria simple en aquellas tablas donde la clave era compuesta, y nos hemos
asegurado de que los atributos que no forman para de ella tengan una
dependencia funcional completa2.
§ Tercera Forma Normal: No se observan relaciones de dependencia funcional
transitiva en ninguna de las tablas. Los atributos se identifican directamente con
la clave primaria y dependen de ella y de ningún otro atributo. Dicho de forma
simplificada, los atributos no primarios aportan datos relevantes directamente en
relación con la clave primaria, y sin la concurrencia de la clave primaria carecen
de sentido.

2
Esta operación se ha hecho en las tablas que expresan relaciones (PDI_Cursos, PDI_Secretario,
Cursos_Aulas, Conserje_Aulas, Conserje_Despachos).
ALEJANDRO LOZANO [1 DAW] 5
BASES DE DATOS 2018/2019

Creación de la base de datos

Se ha creado la base de datos DEPARTAMENTO_FILOSOFIA en un servidor local gestionado a través


de XAMPP. El SGBD utilizado es MySQL Workbench. Adjuntamos en un archivo aparte el
esquema de la base de datos3.

Observaciones
Modificaciones de las tablas respecto del diagrama E/R

• En la tabla PDI el atributo Apellido está establecido como NOT NULL, ya que los usuarios
acostumbran a utilizar las búsquedas empleando este campo y no queremos que quede
vacío.
• Lo mismo se ha hecho con el campo APELLIDO de la tabla PAS
• A la tabla PDI_CONTRATADO se le ha añadido el campo “FECHA_ALTA” (tipo DATE), ya que al
Departamento le interesa saber cuánto tiempo llevan contratados los profesores de esta
categoría.
• En la tabla DESPACHOS hemos establecido el atributo ORDENADOR como TRUE por defecto, ya
que se entiende que, salvo excepciones, todos los despachos tienen que contar con uno.

Inserción de valores

Se adjunta un documento .txt con las instrucciones INSERT que se han llevado a cabo. Hubo
que realizar modificaciones sobre la marcha en algunas instrucciones debido a errores a la
hora de escribir las originales, por lo que no funcionan todas las cargas de datos de ese
documento.

3
Ver fichero ‘esquema_bbdd.mwb’
ALEJANDRO LOZANO [1 DAW] 6
BASES DE DATOS 2018/2019

Sentencias DDL Y DML


Búsquedas de datos

1. Muestra todos los datos de la tabla Despachos:

SELECT * FROM DESPACHOS

2. Muestra el número de aula y los puestos para alumnos de los que disponen

SELECT NUM_AULA, PUESTOS FROM AULAS;

3. Muestra la suma de puestos de las aulas con un alias

SELECT SUM(PUESTOS) AS TOTAL_PUESTOS FROM AULAS;

4. Muestra todos los datos del PDI, sean funcionarios o contratados (realizado con Left
Join)

SELECT * FROM PDI P


LEFT JOIN PDI_CONTRATADO PC ON P.DNI_PDI = PC.DNI_PDI
LEFT JOIN PDI_FUNCIONARIO PF ON P.DNI_PDI = PF.DNI_PDI;

ALEJANDRO LOZANO [1 DAW] 7


BASES DE DATOS 2018/2019

5. Muestra el total de sexenios acumulados por el PDI Funcionario de la Facultad

SELECT SUM(SEXENIOS) AS TOTAL_SEXENIOS FROM PDI_FUNCIONARIO;

6. Muestra la cantidad de PDI contratado que se ha incorporado este año (2019) al


departamento

SELECT COUNT(FECHA_ALTA) AS ESTE_ANO FROM PDI_CONTRATADO


WHERE EXTRACT (YEAR FROM FECHA_ALTA) = 2019;

Estos son todos los PDI Contratados y, efectivamente, hay dos que se han incorporado
en 2019

7. Muestra los datos del PAS cuyo nombre contenga la letra A y ordénalos por DNI de
forma descendente. Limita la búsqueda a 3 resultados.

SELECT * FROM PAS


WHERE NOMBRE LIKE '%A%'
ORDER BY DNI_PAS DESC
LIMIT 3;

ALEJANDRO LOZANO [1 DAW] 8


BASES DE DATOS 2018/2019

Estos son todos los miembros del PAS, y hay más de 3 que tienen la letra A en su
nombre

8. Muestra las aulas que tienen una extensión por encima de la media (con subconsulta)

SELECT * FROM AULAS


WHERE DIMENSIONES >
(SELECT AVG(DIMENSIONES) FROM AULAS);

Estas son todas las aulas del departamento:

ALEJANDRO LOZANO [1 DAW] 9


BASES DE DATOS 2018/2019

9. De entre los miembros del PAS, calcular cuántos de cada tipo tienen un valor de DNI
superior a la media de todo el PAS. Agruparlos por Tipo de PAS

SELECT TIPO, COUNT(DNI_PAS) AS DNI_SUP_MEDIA FROM PAS WHERE DNI_PAS >


(SELECT AVG(DNI_PAS) FROM PAS)
GROUP BY TIPO;

Todos los DNI del PAS (nótese que los primeros 4 DNI tienen una cifra menos debido a
un error de inserción)

10. Muestra el DNI, Nombre y Número de Despacho de aquellos profesores que NO


tengan una impresora en el despacho.

SELECT P.DNI_PDI, NOMBRE, NUM_DESPACHO, IMPRESORA FROM PDI P


INNER JOIN DESPACHOS D ON P.DNI_PDI = D.DNI_PDI
WHERE IMPRESORA = FALSE;

Triggers, procedimientos y funciones

ALEJANDRO LOZANO [1 DAW] 10


BASES DE DATOS 2018/2019

1. Crear una nueva tabla ‘Nuevo PDI Contratado’ donde se registren automáticamente
las nuevas incorporaciones. Debe quedar constancia del usuario que da el alta y del
momento en el que lo hace

Primero creamos la tabla Nuevo PDI Contratado:

Creamos el Trigger:

Damos una nueva alta en PDI Contratado y comprobamos que se ha añadido:

INSERT INTO PDI_CONTRATADO VALUES (4, 82647583, 30, '2019-09-25');

ALEJANDRO LOZANO [1 DAW] 11


BASES DE DATOS 2018/2019

Y comprobamos si el trigger ha saltado en Nuevo PDI Contratado

SELECT * FROM NUEVO_PDI_CONTRATADO;

2. Crear un procedimiento para incrementar la carga docente del PDI Funcionario. Se


pasa por parámetros el Código de Funcionario y las horas que se quieren añadir.

Para comprobar que funciona vamos a añadir 5 horas de dedicación docente al funcionario
con código 2. Este es el estado de los funcionarios antes de utilizar el procedimiento:

Ejecutamos el procedimiento: CALL PA_AUMENTA_CARGA (5, 2);


El resultado es aumento de la carga docente a 20 horas:

ALEJANDRO LOZANO [1 DAW] 12


BASES DE DATOS 2018/2019

3. Diseñar un procedimiento almacenado que impida crear aulas con una extensión
menor a 50 metros cuadrados y que, en caso de intentar hacerlo, devuelva un mensaje
avisando de esta prohibición.

Para comprobarlo, intentamos crear una nueva aula con dimensiones prohibidas:
CALL PA_CREA_AULA (44, 30, 35);

La nueva aula no se ha creado:

ALEJANDRO LOZANO [1 DAW] 13

También podría gustarte