0% encontró este documento útil (0 votos)
587 vistas34 páginas

Index

Este documento presenta un modelo entidad-relación extendido para gestionar proyectos de investigación y los profesores que participan en ellos para el departamento de Informática de la Universidad de Almería. Se describen las entidades y relaciones necesarias para almacenar información sobre proyectos de investigación, profesores, roles de los profesores en los proyectos como investigadores principales o supervisores, y publicaciones resultantes de los proyectos. El modelo propuesto incluye tres fases: modelo conceptual utilizando un diagrama E-R, modelo lógico tra

Cargado por

Julio Lopez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
587 vistas34 páginas

Index

Este documento presenta un modelo entidad-relación extendido para gestionar proyectos de investigación y los profesores que participan en ellos para el departamento de Informática de la Universidad de Almería. Se describen las entidades y relaciones necesarias para almacenar información sobre proyectos de investigación, profesores, roles de los profesores en los proyectos como investigadores principales o supervisores, y publicaciones resultantes de los proyectos. El modelo propuesto incluye tres fases: modelo conceptual utilizando un diagrama E-R, modelo lógico tra

Cargado por

Julio Lopez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Unidad Didáctica 2.

Diseño de bases
de datos relacionales

JOSÉ JUAN SÁNCHEZ HERNÁNDEZ

IES Celia Viñas (Almería) - 2019/2020


Índice general

1 Ejercicios Modelo Entidad-Relación Extendido 5


1.1 Proyectos de investigación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.2 Modelo lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
[Link] Modelo relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.3 Modelo físico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
[Link] Base de datos para MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Cursos de formación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.2 Modelo lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
[Link] Modelo relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.3 Modelo físico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
[Link] Base de datos para MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Campeonato de Ajedrez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.2 Modelo lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
[Link] Modelo relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.3 Modelo físico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
[Link] Base de datos para MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Librería OnLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5 Spotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6 YouTube Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.6.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7 Pizzería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.8 Exámenes tipo test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.9 Vídeos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1
Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.9.1 Modelo conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


[Link] Diagrama E/R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.10 Banco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.11 Organizaciones no gubernamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.12 Venta de cocinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.13 Gestión de nóminas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2 Créditos 32

3 Licencia 33

José Juan Sánchez Hernández 2


Índice de cuadros

3
Índice de figuras

4
Capítulo 1

Ejercicios Modelo Entidad-Relación


Extendido

1.1 Proyectos de investigación

El departamento de Informática de la Universidad de Almería desea diseñar una base de datos para gestionar
los profesores que participan en los proyectos de investigación.

• De cada proyecto de investigación se desea almacenar un identificador único, nombre, presupuesto total,
el programa de I+D que lo financia, fecha de inicio, fecha de finalización y una descripción.

• En los proyectos de investigación trabajan profesores del departamento durante un periodo de tiempo,
determinado por una fecha de inicio y una fecha de fin. Tenga en cuenta que un mismo profesor puede
trabajar en el mismo proyecto en diferentes épocas.

• De cada profesor se desea almacenar un identificador único, nombre, apellidos, despacho y teléfono.

• Un profesor puede trabajar en varios proyectos a la vez y en un proyecto pueden trabajar varios profeso-
res.

• Los profesores del departamento pueden ser doctores o no doctores.

• Un profesor no doctor debe ser supervisado por un profesor doctor. El tiempo de supervisión viene deter-
minado por una fecha de inicio y una fecha de fin. Deberemos almacenar los profesores doctores que han
supervisado a un profesor no doctor y durante qué periodos lo han sido.

• De todos los profesores que trabajan en el proyecto hay uno que es el investigador principal, que será el
encargado de coordinar el proyecto. Es necesario almacenar quién es el investigador principal de cada
uno de los proyectos. Tenga en cuenta que el investigador principal no puede cambiar a lo largo de la
vida del proyecto, siempre será el mismo.

• El investigador principal de un proyecto tiene que ser un profesor doctor, en ningún caso podrá serlo un
profesor no doctor.

• Los profesores doctores y no doctores escriben publicaciones. Una publicación consta de un código único
y un título. Y una publicación puede ser de dos tipos, puede ser una publicación en una revista o en un

5
Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

congreso.

• Si la publicación es en una revista además del código único y el título vamos a almacenar el volumen, el
número, la página de inicio y la página de fin.

• Si la publicación es en un congreso además del código único y el título vamos a almacenar el tipo de
congreso, ciudad, país, fecha de inicio, fecha de fin y editorial.

1.1.1 Modelo conceptual

[Link] Diagrama E/R

1.1.2 Modelo lógico

Las reglas de transformación de E/R al modelo relacional nos dicen que la relación Trabaja genera una nue-
va tabla porque es una relación de cardinalidad N:N. Esta nueva tabla recibe las claves primarias de las dos
entidades que participan en la relación y además participan como clave primaria. La solución teórica sería la
siguiente:

• PROFESOR_TRABAJA_PROYECTO(id_profesor, id_proyecto, fecha_inicio, fecha_fin)


– id_profesor: FK (Foreign Key) de PROFESOR(id)
– id_proyecto: FK (Foreign Key) de PROYECTO(id)

Con esta solución podemos tener un problema en el caso de que un profesor trabaje en el mismo proyecto en
fechas diferentes. En este caso no podríamos almacenar esta información en la tabla porque se producuría un
error de claves duplicadas.

id_profesor id_proyecto fecha_inicio fecha_fin

1 1 1/01/2017 31/12/2017

1 1 1/11/2018 31/12/2018

José Juan Sánchez Hernández 6


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

Para solucionarlo podemos incluir el atributo fecha_inicio como parte de la clave primaria de la tabla, de mo-
do que la clave primaria estaría compuesta por id_profesor, id_proyecto y fecha_inicio. La solución sería la
siguiente:

• PROFESOR_TRABAJA_PROYECTO(id_profesor, id_proyecto, fecha_inicio, fecha_fin)


– id_profesor: FK (Foreign Key) de PROFESOR(id)
– id_proyecto: FK (Foreign Key) de PROYECTO(id)

En este caso ya no habría ningún problema para almacenar que un profesor participa en el mismo proyecto en
fechas diferentes.

id_profesor id_proyecto fecha_inicio fecha_fin

1 1 1/01/2017 31/12/2017

1 1 1/11/2018 31/12/2018

Otra forma de resolver este problema puede ser creando un nuevo atributo id que sea un valor numérico auto-
incrementado y que éste sea la única clave primara de la tabla. La solución sería la siguiente:

• PROFESOR_TRABAJA_PROYECTO(id, id_profesor, id_proyecto, fecha_inicio, fecha_fin)


– id_profesor: FK (Foreign Key) de PROFESOR(id)
– id_proyecto: FK (Foreign Key) de PROYECTO(id)

En este caso tampoco habría ningún problema para almacenar que un profesor participa en el mismo proyecto
en fechas diferentes.

#id id_profesor id_proyecto fecha_inicio fecha_fin

1 1 1 1/01/2017 31/12/2017

2 1 1 1/11/2018 31/12/2018

[Link] Modelo relacional

• PROFESOR(id, nombre, apellido1, apellido2, despacho, teléfono, tipo)

• PROYECTO_INVESTIGACIÓN(id, nombre, programa_id, descripción, fecha_inicio, fecha_fin, presupuesto,


id_doctor)

– id_doctor: FK (Foreign Key) de PROFESOR(id)

• PROFESOR_TRABAJA_PROYECTO(id, id_profesor, id_proyecto, fecha_inicio, fecha_fin)

– id_profesor: FK (Foreign Key) de PROFESOR(id)


– id_proyecto: FK (Foreign Key) de PROYECTO(id)

• DOCTOR_SUPERVISA_NO_DOCTOR(id, id_doctor, id_no_doctor, fecha_inicio, fecha_fin)

– id_doctor: FK (Foreign Key) de PROFESOR(id)

José Juan Sánchez Hernández 7


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

– id_no_doctor: FK (Foreign Key) de PROFESOR(id)

• PUBLICACIÓN(id, título, tipo)

• REVISTA(id, volumen, número, página_inicio, página_fin)

– id: FK (Foreign Key) de PUBLICACIÓN(id)

• CONGRESO(id, tipo, ciudad, país, fecha_inicio, fecha_fin)

– id: FK (Foreign Key) de PUBLICACIÓN(id)

• PROFESOR_ESCRIBE_PUBLICACIÓN(id_profesor, id_publicación)

– id_profesor: FK (Foreign Key) de PROFESOR(id)


– id_publicación: FK (Foreign Key) de PUBLICACIÓN(id)

1.1.3 Modelo físico

[Link] Base de datos para MySQL

DROP DATABASE IF EXISTS proyectos;


CREATE DATABASE proyectos CHARACTER SET utf8mb4;
USE proyectos;

CREATE TABLE profesor (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
apellido1 VARCHAR(100) NOT NULL,
apellido2 VARCHAR(100),
despacho VARCHAR(10) NOT NULL,
telefono CHAR(9) NOT NULL,
tipo ENUM('Doctor', 'No Doctor') NOT NULL DEFAULT 'Doctor'
);

CREATE TABLE proyecto_investigacion (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(200) NOT NULL,
programa_id VARCHAR(200) NOT NULL,
descripcion VARCHAR(512) NOT NULL,
fecha_inicio DATE NOT NULL,
fecha_fin DATE NOT NULL,
presupuesto FLOAT UNSIGNED,
id_doctor INTEGER UNSIGNED,
FOREIGN KEY (id_doctor) REFERENCES profesor(id)
);

CREATE TABLE profesor_trabaja_proyecto (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,

José Juan Sánchez Hernández 8


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

id_profesor INTEGER UNSIGNED NOT NULL,


id_proyecto INTEGER UNSIGNED NOT NULL,
fecha_inicio DATE NOT NULL,
fecha_fin DATE NOT NULL,
FOREIGN KEY (id_profesor) REFERENCES profesor(id),
FOREIGN KEY (id_proyecto) REFERENCES proyecto_investigacion(id)
);

CREATE TABLE doctor_supervisa_no_doctor (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_doctor INTEGER UNSIGNED NOT NULL,
id_no_doctor INTEGER UNSIGNED NOT NULL,
fecha_inicio DATE NOT NULL,
fecha_fin DATE NOT NULL,
FOREIGN KEY (id_doctor) REFERENCES profesor(id),
FOREIGN KEY (id_no_doctor) REFERENCES profesor(id)
);

CREATE TABLE publicacion (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(200) NOT NULL,
tipo ENUM('revista', 'congreso') NOT NULL
);

CREATE TABLE revista (


id INTEGER UNSIGNED PRIMARY KEY,
volumen SMALLINT UNSIGNED NOT NULL,
numero SMALLINT UNSIGNED NOT NULL,
pagina_inicio SMALLINT UNSIGNED NOT NULL,
pagina_fin SMALLINT UNSIGNED NOT NULL,
FOREIGN KEY (id) REFERENCES publicacion(id)
);

CREATE TABLE congreso (


id INTEGER UNSIGNED PRIMARY KEY,
tipo VARCHAR(50) NOT NULL,
ciudad VARCHAR(50) NOT NULL,
pais VARCHAR(50) NOT NULL,
fecha_inicio DATE NOT NULL,
fecha_fin DATE NOT NULL,
FOREIGN KEY (id) REFERENCES publicacion(id)
);

CREATE TABLE profesor_escribe_publicacion (


id_profesor INTEGER UNSIGNED NOT NULL,
id_publicacion INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (id_profesor, id_publicacion),
FOREIGN KEY (id_profesor) REFERENCES profesor(id),
FOREIGN KEY (id_publicacion) REFERENCES publicacion(id)

José Juan Sánchez Hernández 9


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

);

José Juan Sánchez Hernández 10


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.2 Cursos de formación

El departamento de formación de una empresa desea diseñar una base de datos para planificar y gestionar la
formación de sus empleados.

• La empresa organiza cursos internos de formación de los que se desea conocer el código de curso, el
nombre, una descripción, el número de horas de duración y el coste del curso.
• Un curso puede tener como prerrequisito haber realizado otro(s) previamente, y a su vez la realización de
un curso puede ser prerrequisito de otros. Un curso que es un prerrequisito de otro puede serlo de forma
obligatoria o sólo recomendable.
• Un mismo curso tiene diferentes ediciones, es decir, se imparte en diferentes lugares, fechas y con dife-
rentes horarios (intensivo, de mañana o de tarde). En una misma fecha de inicio sólo puede impartirse
una edición de un curso.
• Los cursos se imparten por personal de la empresa.
• De los empleados se desea almacenar su código de empleado, nombre y apellidos, dirección, teléfono,
NIF, fecha de nacimiento, nacionalidad y salario, así como si está capacitado para impartir cursos.
• Un mismo empleado puede ser docente en una edición de un curso y alumno en otra edición, pero nunca
puede ser ambas cosas a la vez (en una misma edición de curso o lo imparte o lo recibe).

1.2.1 Modelo conceptual

[Link] Diagrama E/R

José Juan Sánchez Hernández 11


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.2.2 Modelo lógico

[Link] Modelo relacional

• EMPLEADO(id, nombre, apellido1, apellido2, teléfono, dirección, tipo)

• CURSO(id, nombre, descripción, duración, coste)

• CURSO_TIENE_PRERREQUISTO_CURSO(id_curso, id_curso_prerrequisito, es_obligatorio)

– id_curso: FK (Foreign Key) de CURSO(id)


– id_curso_prerrequisito: FK (Foreign Key) de CURSO(id)

• EDICIÓN(id, fecha_inicio, fecha_fin, horario, lugar, id_curso, id_empleado_capacitado)

– id_curso: FK (Foreign Key) de CURSO(id)


– id_empleado_capacitado: FK (Foreign Key) de EMPLEADO(id)

• EMPLEADO_RECIBE_EDICIÓN(id_empleado, id_edicion)

– id_empleado: FK (Foreign Key) de EMPLEADO(id)


– id_edicion: FK (Foreign Key) de EDICIÓN(id)

1.2.3 Modelo físico

[Link] Base de datos para MySQL

DROP DATABASE IF EXISTS formacion;


CREATE DATABASE formacion CHARACTER SET utf8mb4;
USE formacion;

CREATE TABLE empleado (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
apellido1 VARCHAR(100) NOT NULL,
apellido2 VARCHAR(100),
telefono CHAR(9) NOT NULL UNIQUE,
direccion VARCHAR(200) NOT NULL,
tipo ENUM('Capacitado', 'No capacitado') NOT NULL
);

CREATE TABLE curso (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
descripcion VARCHAR(512) NOT NULL,
duracion SMALLINT UNSIGNED NOT NULL,
coste FLOAT(6,2) NOT NULL
);

José Juan Sánchez Hernández 12


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

CREATE TABLE curso_tiene_prerrequisito_curso (


id_curso INTEGER UNSIGNED NOT NULL,
id_curso_prerrequisito INTEGER UNSIGNED NOT NULL,
es_obligatorio BOOLEAN NOT NULL,
PRIMARY KEY (id_curso, id_curso_prerrequisito),
FOREIGN KEY (id_curso) REFERENCES curso(id),
FOREIGN KEY (id_curso_prerrequisito) REFERENCES curso(id)
);

CREATE TABLE edicion (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
fecha_inicio DATE NOT NULL,
fecha_fin DATE NOT NULL,
horario TIME NOT NULL,
lugar VARCHAR(100) NOT NULL,
id_curso INTEGER UNSIGNED NOT NULL,
id_empleado_capacitado INTEGER UNSIGNED NOT NULL,
FOREIGN KEY (id_curso) REFERENCES curso(id),
FOREIGN KEY (id_empleado_capacitado) REFERENCES empleado(id)
);

CREATE TABLE empleado_recibe_formacion (


id_empleado INTEGER UNSIGNED NOT NULL,
id_edicion INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (id_empleado, id_edicion),
FOREIGN KEY (id_empleado) REFERENCES empleado(id),
FOREIGN KEY (id_edicion) REFERENCES edicion(id)
);

José Juan Sánchez Hernández 13


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.3 Campeonato de Ajedrez

El club de Ajedrez de Huércal de Almería, ha sido encargado por la Federación Internacional de Ajedrez de la
organización de los próximos campeonatos mundiales que se celebrarán en la localidad. Por este motivo, desea
llevar a una base de datos toda la gestión relativa a participantes, alojamientos y partidas. Teniendo en cuenta
que:

• En el campeonato participan jugadores y árbitros, de ambos se requiere conocer el número de asociado,


nombre, dirección y teléfono de contacto. De los jugadores se precisa además el nivel de juego en una
escala de 1 a 10. Y de los árbitros guardaremos los años de experiencia.
• Ningún árbitro puede participar como jugador.
• Los países envían al campeonato un conjunto de jugadores y árbitros, aunque no todos los países envían
participantes. Todo jugador y árbitro es enviado por un único país. Un país puede ser representado por
otro país.
• Cada país se identifica por un número correlativo según su orden alfabético e interesa conocer además
su nombre y el número de clubes de ajedrez existentes en el mismo.
• Cada partida se identifica por un número correlativo (CódigoPartida), la juegan dos jugadores y la arbitra
un árbitro. Interesa registrar las partidas que juega cada jugador y el color (blancas o negras) con el que
juega. Ha de tenerse en cuenta que un árbitro no puede arbitrar a jugadores enviados por el mismo país
que ha enviado él.
• Todo participante participa en al menos una partida.
• Tanto jugadores como árbitros se alojan en uno de los hoteles en los que se desarrollan las partidas, se
desea conocer en qué hotel y en qué fechas se ha alojado cada uno de los participantes. Los participantes
pueden no permanecer en Huércal de Almería durante todo el campeonato, sino acudir cuando tienen
que jugar alguna partida alojándose en el mismo o distinto hotel. De cada hotel, se desea conocer el
nombre, la dirección y el número de teléfono.
• El campeonato se desarrolla a lo largo de una serie de jornadas (año, mes, día) y cada partida tiene lugar
en una de las jornadas aunque no tengan lugar partidas todas las jornadas.
• Cada partida se celebra en una de las salas de las que pueden disponer los hoteles, se desea conocer el
número de entradas vendidas en la sala para cada partida. De cada sala, se desea conocer la capacidad y
medios de que dispone (radio, televisión, vídeo,…) para facilitar la retransmisión de los encuentros. Una
sala puede disponer de varios medios distintos.
• De cada partida se pretende registrar todos los movimientos que la componen, la identificación de mo-
vimiento se establece en base a un número de orden dentro de cada partida, para cada movimiento se
guardan la jugada (5 posiciones) y un breve comentario realizado por un experto.

1.3.1 Modelo conceptual

José Juan Sánchez Hernández 14


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

[Link] Diagrama E/R

1.3.2 Modelo lógico

[Link] Modelo relacional

• PARTICIPANTE(id, número_asociado, nombre, apellido1, apellido2, dirección, teléfono, tipo)

• JUGADOR(id, nivel)

– id: FK (Foreign Key) de PARTICIPANTE(id)

• ÁRBITRO(id, años_experiencia)

– id: FK (Foreign Key) de PARTICIPANTE(id)

• PAÍS(id, nombre, número_clubs, id_país_representante)

– id_país_representante: FK (Foreign Key) de PAÍS(id)

• HOTEL(id, nombre, dirección, teléfono)

• SALA(id, nombre, capacidad, id_hotel)

– id_hotel: FK (Foreign Key) de HOTEL(id)

• MEDIOS(id, nombre)

• SALA_TIENE_MEDIOS(id_sala, id_medio)

– id_sala: FK (Foreign Key) de SALA(id)

José Juan Sánchez Hernández 15


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

– id_medio: FK (Foreign Key) de MEDIOS(id)

• PARTICIPANTE_SE_ALOJA_HOTEL(id, id_participante, id_hotel, fecha_entrada, fecha_salida)

– id_participante: FK (Foreign Key) de PARTICIPANTE(id)


– id_hotel: FK (Foreign Key) de HOTEL(id)

• JORNADA(id, día, mes, año)

• PARTIDA(id, id_jugador_blancas, id_jugador_negras, id_árbitro, id_sala, id_jornada)

– id_jugador_blancas: FK (Foreign Key) de JUGADOR(id)


– id_jugador_negras: FK (Foreign Key) de JUGADOR(id)
– id_árbitro: FK (Foreign Key) de ÁRBITRO(id)

– id_sala: FK (Foreign Key) de SALA(id)

– id_jornada: FK (Foreign Key) de JORNADA(id)

• MOVIMIENTOS(id, número_movimiento, posiciones, comentario, id_partida)

– id_partida: FK (Foreign Key) de PARTIDA(id)

1.3.3 Modelo físico

[Link] Base de datos para MySQL

DROP DATABASE IF EXISTS ajedrez;


CREATE DATABASE ajedrez CHARACTER SET utf8mb4;
USE ajedrez;

CREATE TABLE participante (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
numero_asociado MEDIUMINT UNSIGNED NOT NULL UNIQUE,
nombre VARCHAR(100) NOT NULL,
apellido1 VARCHAR(100) NOT NULL,
apellido2 VARCHAR(100) NOT NULL,
direccion VARCHAR(150) NOT NULL,
telefono CHAR(9) NOT NULL UNIQUE,
tipo ENUM('Jugador', 'Árbitro') NOT NULL
);

CREATE TABLE jugador (


id INTEGER UNSIGNED PRIMARY KEY,
nivel TINYINT UNSIGNED NOT NULL,
FOREIGN KEY (id) REFERENCES participante(id)
);

CREATE TABLE arbitro (

José Juan Sánchez Hernández 16


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

id INTEGER UNSIGNED PRIMARY KEY,


anyos_experiencia TINYINT UNSIGNED,
FOREIGN KEY (id) REFERENCES participante(id)
);

CREATE TABLE pais (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
numero_clubs SMALLINT UNSIGNED NOT NULL,
id_pais_representante INTEGER UNSIGNED,
FOREIGN KEY (id_pais_representante) REFERENCES pais(id)
);

CREATE TABLE hotel (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
direccion VARCHAR(150) NOT NULL,
telefono CHAR(9) NOT NULL UNIQUE
);

CREATE TABLE sala (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
capacidad SMALLINT UNSIGNED NOT NULL,
id_hotel INTEGER UNSIGNED,
FOREIGN KEY (id_hotel) REFERENCES hotel(id)
);

CREATE TABLE medios (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL
);

CREATE TABLE sala_tiene_medios (


id_sala INTEGER UNSIGNED NOT NULL,
id_medio INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (id_sala, id_medio),
FOREIGN KEY (id_sala) REFERENCES sala(id),
FOREIGN KEY (id_medio) REFERENCES medios(id)
);

CREATE TABLE participante_se_aloja_hotel (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_participante INTEGER UNSIGNED NOT NULL,
id_hotel INTEGER UNSIGNED NOT NULL,
fecha_entrada DATE NOT NULL,
fecha_salida DATE NOT NULL,
FOREIGN KEY (id_participante) REFERENCES participante(id),
FOREIGN KEY (id_hotel) REFERENCES hotel(id)

José Juan Sánchez Hernández 17


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

);

CREATE TABLE jornada (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
dia TINYINT UNSIGNED NOT NULL CHECK(dia >=1 AND dia<=31),
mes TINYINT UNSIGNED NOT NULL CHECK(mes >=1 AND mes<=12),
anyo YEAR(4) NOT NULL
);

CREATE TABLE partida (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_jugador_blancas INTEGER UNSIGNED NOT NULL,
id_jugador_negras INTEGER UNSIGNED NOT NULL,
id_arbitro INTEGER UNSIGNED NOT NULL,
id_sala INTEGER UNSIGNED NOT NULL,
id_jornada INTEGER UNSIGNED NOT NULL,
FOREIGN KEY (id_jugador_blancas) REFERENCES jugador(id),
FOREIGN KEY (id_jugador_negras) REFERENCES jugador(id),
FOREIGN KEY (id_arbitro) REFERENCES arbitro(id),
FOREIGN KEY (id_sala) REFERENCES sala(id),
FOREIGN KEY (id_jornada) REFERENCES jornada(id)
);

CREATE TABLE movimientos (


id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
numero_movimiento SMALLINT UNSIGNED NOT NULL,
posiciones VARCHAR(20) NOT NULL,
comentario VARCHAR(50),
id_partida INTEGER UNSIGNED NOT NULL,
FOREIGN KEY (id_partida) REFERENCES partida(id)
);

José Juan Sánchez Hernández 18


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.4 Librería OnLine

Un cliente le ha contratado para diseñar una web que permita comprar libros por Internet. Tenga en cuenta las
siguientes indicaciones para modelar cómo sería la base de datos del proyecto:

• Cada libro tiene un identificador único, título, isbn, año de publicación y descripción. También es intere-
sante almacenar los datos del autor/es y de la editorial que ha publicado el libro.

• Los libros que se podrán comprar en la web pueden ser libros de papel o libros electrónicos (ebooks).
En el caso de los libros de papel interesa guardar donde ha sido impreso y la fecha de impresión. En el
caso de un ebook guardaremos el tamaño del archivo. Hay que tener en cuenta que un mismo libro tiene
precios diferentes en papel y en formato ebook.

• De los autores nos interesa almacenar el nombre, apellidos, dirección, localidad, provincia, url de su pá-
gina web y un identificador único de autor.

• Para las editoriales guardaremos un identificador, nombre, dirección, localidad, provincia, número de
teléfono y la url de su página web.

• La tienda dispondrá de varios almacenes, de cada uno guardaremos un identificador, una dirección, lo-
calidad, provincia y un teléfono de contacto.

• Un almacén puede almacenar diferentes libros. Un mismo libro puede estar almacenado en diferentes
almacenes. Nos interesa saber el número de copias de cada libro que hay en cada almacén.

• La base de datos debe almacenar los datos de los clientes. De cada cliente guardamos su nombre, apelli-
dos, dirección, localidad, provincia, email y teléfono.

• Un cliente puede tener varias cestas de la compra en el sitio web. Cada cesta de la compra está identificada
por un identificador único, contiene la fecha de la compra y puede contener varios libros. Algunas cestas
de la compra pueden tener más de una copia del mismo libro, por lo que será necesario almacenar la
cantidad de copias que se han comprado de cada libro en cada cesta de la compra.

1.4.1 Modelo conceptual

José Juan Sánchez Hernández 19


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

[Link] Diagrama E/R

José Juan Sánchez Hernández 20


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.5 Spotify

Vamos a tratar de hacer un modelo sencillo de cómo sería la base de datos necesaria para Spotify.

• Existen dos tipos de usuarios: usuario free y usuario premium.

• De cada usuario guardamos un id único, email, password, nombre de usuario, fecha de nacimiento, sexo,
país, código postal.

• Para los usuarios premium habrá que guardar los datos necesarios para la suscripción que son: una fecha
de renovación del servicio y una forma de pago, que puede ser mediante tarjeta de crédito o PayPal.

• De las tarjetas de crédito guardamos el número de tarjeta, mes y año de caducidad y el código de seguri-
dad. De los usuarios que pagan con PayPal guardamos el nombre de usuario de PayPal.

• Nos interesa llevar un registro de todos los pagos que un usuario premium ha ido realizando. De cada
pago se guarda la fecha, un número de orden (que es único) y un total.

• Un usuario puede tener muchas playlists. De cada playlist guardamos un título, el número de canciones
que contiene, un identificador único y una fecha de creación.

• Cuando un usuario borra una playlist no se borra del sistema, sino que se marca como que ha sido elimi-
nada. De este modo el usuario puede volver a recuperar sus playlists en caso de que las haya eliminado
por error. Es necesario almacenar la fecha en la que una playlist ha sido marcada como eliminada.

• Podemos decir que existen dos tipos de playlists: activas y borradas.

• Una playlist que está activa puede ser compartida con otros usuarios, esto quiere decir que otros usuarios
pueden añadir canciones en ella. En una lista compartida nos interesa saber qué usuario ha sido el que
ha añadido cada canción y en qué fecha lo hizo.

• Una canción sólo puede pertenecer a un único álbum. Un álbum puede contener muchas canciones. Un
álbum ha sido publicado por un único artista. Un artista puede haber publicado muchos álbumes.

• De cada canción guardamos un id único, un título, una duración y el número de veces que ha sido repro-
ducida por los usuarios de Spotify.

• De cada álbum guardamos un id único, título, año de publicación y una imagen con la portada.

• De cada artista guardamos un id único, nombre y una imagen del artista.

• Un usuario puede seguir a muchos artistas.

• Un artista puede estar relacionado con otros artistas que hagan música parecida. De modo que Spotify
pueda mostrarnos un listado de artistas relacionados con los artistas que nos gustan.

• También nos interesa guardar cuáles son los álbumes y las canciones favoritas de un usuario. Un usuario
puede seleccionar muchos álbumes y muchas canciones como favoritas.

1.5.1 Modelo conceptual

José Juan Sánchez Hernández 21


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

[Link] Diagrama E/R

José Juan Sánchez Hernández 22


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.6 YouTube Lite

Vamos a tratar de hacer un modelo sencillo de cómo sería la base de datos para una versión reducida de You-
Tube.

• De cada usuario guardamos un id único, email, password, nombre de usuario, fecha de nacimiento, sexo,
país, código postal.

• Un usuario publica vídeos.

• De cada vídeo guardamos un id único, un título, una descripción, un tamaño, el nombre del archivo de
vídeo, duración del vídeo, un thumbnail, el número de reproducciones, el número de likes, el número de
dislikes.

• Un vídeo puede tener tres estados diferentes: público, oculto y privado.

• Un vídeo puede tener muchas etiquetas. Una etiqueta se identifica por un id único y un nombre de eti-
queta.

• Interesa guardar quién es el usuario que publica el vídeo y en qué fecha/hora lo hace.

• Un usuario puede crear un canal. Un canal tiene un id único, un nombre, una descripción y una fecha de
creación.

• Un usuario se puede suscribir a los canales de otros usuarios.

• Un usuario puede darle un like o un dislike a un vídeo una única vez. Habrá que llevar un registro de los
usuarios que le han dado like y dislike a un determinado vídeo y en qué fecha/hora lo hicieron.

• Un usuario puede crear playlists con los vídeos que le gustan. Cada playlist tiene un id único, un nombre,
una fecha de creación, y un estado que indica que puede ser pública o privada.

• YouTube te puede recomendar vídeos en función de los vídeos que has visto, por lo tanto habrá que guar-
dar de algún modo los vídeos que están relacionados entre sí con contenidos similares.

• Un usuario puede escribir comentarios en un vídeo determinado. Cada comentario está identificado por
un id único, el texto del comentario y la fecha/hora en la que se realizó.

• Un usuario puede marcar un comentario como me gusta o no me gusta. Habrá que llevar un registro de los
usuarios que han marcado un comentario como me gusta/no me gusta, y en qué fecha/hora lo hicieron.

1.6.1 Modelo conceptual

[Link] Diagrama E/R

Se han omitido algunos atributos de las entidades Usuario y Vídeo con el fin de simplificar el diagrama.

Los atributos que contienen cada una de estas entidades son los siguientes:

• Usuario: id, email, password, username, fecha_nacimiento, sexo, país, código_postal.


• Vídeo: id, título, descripción, tamaño, nombre_archivo, duración, thumbnail, reproducciones, likes, dis-
likes, estado, fecha_publicación.

José Juan Sánchez Hernández 23


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

José Juan Sánchez Hernández 24


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.7 Pizzería

Un cliente le ha contratado para diseñar una web que permita hacer pedidos de comida a domicilio por Internet.
Tenga en cuenta las siguientes indicaciones para modelar cómo sería la base de datos del proyecto:

• Para cada cliente almacenamos un identificador único, nombre, apellidos, dirección, código postal, loca-
lidad, provincia y número de teléfono.

• Los datos de localidad y provincia estarán almacenados en tablas separadas. Sabemos que una localidad
pertenece a una única provincia, y que una provincia puede tener muchas localidades.

• Para cada localidad almacenamos un identificador único y un nombre. Para cada provincia almacenamos
un identificador único y un nombre.

• Un cliente puede realizar muchos pedidos, pero un único pedido sólo puede ser realizado por un único
cliente. De cada pedido se almacena un identificador único, fecha/hora, si el pedido es para reparto a
domicilio o para recoger en tienda, la cantidad de productos que se han seleccionado de cada tipo y el
precio total.

• Un pedido puede constar de uno o varios productos. Los productos pueden ser pizzas, hamburguesas y
bebidas. De cada producto se almacena: un identificador único, nombre, descripción, imagen y precio.

• En el caso de las pizzas existen varias categorías que pueden ir cambiando de nombre a lo largo del año.
Una pizza sólo puede estar dentro de una categoría, pero una categoría puede tener muchas pizzas. De
cada categoría se almacena un identificador único y un nombre.

• Un pedido es gestionado por una única tienda y una tienda puede gestionar muchos pedidos. De cada
tienda se almacena un identificador único, dirección, código postal, localidad y provincia.

• En una tienda pueden trabajar muchos empleados y un empleado sólo puede trabajar en una tienda. De
cada empleado se almacena un identificador único, nombre, apellidos, nif, teléfono y si trabaja como
cocinero o repartidor.

• Para los pedidos de reparto a domicilio interesa guardar quién es el repartidor que realiza la entrega del
pedido y la fecha/hora del momento de la entrega.

José Juan Sánchez Hernández 25


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.8 Exámenes tipo test

El alumnado de 1º ASIR y 1º DAW del IES Celia Viñas ha decidido desarrollar una web que les permita realizar
exámenes tipo test para preparar los exámenes de los diferentes módulos del ciclo. El funcionamiento es muy
sencillo, al entrar en la web aparece un formulario donde puedes seleccionar el módulo sobre el que quieres
realizar el test, el tema, la dificultad de las preguntas y el número total de preguntas. La web generará un examen
con preguntas aleatorias cada vez que se solicite. Diseñe el modelo entidad/relación necesario para la base
de datos del proyecto teniendo en cuenta las siguientes indicaciones:

• Es necesario almacenar información sobre los módulos. De cada módulo vamos a almacenar un identifi-
cador único y un nombre.

• Un módulo consta de varios temas, pero un tema sólo puede pertenecer a un único módulo. De cada
tema almacenamos un identificador único, el número del tema y el título.

• Un tema consta de varias preguntas, pero una pregunta sólo puede pertenecer a un único tema. De cada
pregunta almacenamos un identificador único, el enunciado de la pregunta y el grado de dificultad. Una
pregunta sólo puede tener un grado de dificultad, que tiene que ser un valor dentro del siguiente conjunto:
Bajo, Medio, Alto.

• Una pregunta tiene asociadas varias respuestas, pero una respuesta sólo puede estar asociada a una úni-
ca pregunta. De todas las respuestas que se muestran sólo una será la correcta. De cada respuesta vamos
a almacenar un identificador único, el texto de la respuesta y un campo que indique si es la respuesta
correcta o no lo es.

• Es necesario almacenar información sobre los exámenes que se han realizado. Tenga en cuenta que un
examen consta de muchas preguntas y una misma pregunta puede aparecer en muchos exámenes dife-
rentes. De cada examen se almacena un identificador único, la fecha de creación, un nombre y el número
total de preguntas que tiene.

• Un alumno realiza muchos exámenes y un examen puede ser realizado por muchos alumnos. Es necesa-
rio almacenar la fecha de realización y la nota que ha obtenido el alumno para cada uno de los exámenes
realizados. De cada alumno almacenamos un identificador único, username, password, nombre y apelli-
dos.

• También es necesario almacenar cuáles han sido las respuestas que ha seleccionado un alumno en cada
uno de los exámenes que ha realizado.

1.9 Vídeos

El siguiente diagrama E/R representa una base de datos sencilla de una aplicación web que permite visualizar
vídeos por Internet. Realice el paso a tablas relacionales a partir del diagrama E/R.

1.9.1 Modelo conceptual

José Juan Sánchez Hernández 26


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

[Link] Diagrama E/R

José Juan Sánchez Hernández 27


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.10 Banco

Queremos diseñar una base de datos para un banco con los siguientes requisitos:

• El banco está organizado en sucursales. Cada sucursal está ubicada en una ciudad particular y se identi-
fica por un nombre único. El banco supervisa los activos de cada sucursal.
• Los clientes del banco se identifican mediante un id-cliente. El banco almacena cada nombre de clien-
te, calle y ciudad donde viven. Los clientes pueden tener cuentas y pueden pedir préstamos. Un cliente
puede estar asociado con un banquero particular, que puede actuar como responsable de préstamos o
banquero personal para un cliente.
• Los empleados del banco se identifican mediante un id-empleado. La administración del banco almace-
na el nombre, número de teléfono de cada empleado, y el id-empleado del jefe del empleado. El banco
también mantiene registro de la fecha de comienzo del contrato del empleado, así como su antigüedad.
• El banco ofrece dos tipos de cuentas: cuentas de ahorro y cuentas corrientes. Las cuentas pueden aso-
ciarse a más de un cliente y un cliente puede tener más de una cuenta. Cada cuenta está asignada a un
único número de cuenta. El banco mantiene un registro del saldo de cada cuenta y la fecha más reciente
en que la cuenta fue accedida por cada cliente que mantiene la cuenta. Además, cada cuenta de ahorro
tiene un tipo de interés y para cada cuenta corriente se almacena el descubierto.
• Un préstamo tiene lugar en una sucursal particular y puede estar asociado a uno o más clientes. Un présta-
mo se identifica mediante un único número de préstamo. Para cada préstamo el banco mantiene registro
del importe del préstamo y de los pagos del préstamo. Aunque un número de pago del préstamo no iden-
tifica de forma única un pago entre todos los préstamos del banco, un número de pago identifica un pago
particular para un préstamo específico. Para cada pago se almacenan la fecha y el importe.

En un desarrollo de un banco real, el banco mantendría información de los abonos y cargos en las cuentas
de ahorros y en las cuentas corrientes, igual que se mantiene registro de los pagos para los préstamos. Para
mantener nuestro ejemplo reducido, en este modelo no se mantiene un seguimiento de tales abonos y cargos.

José Juan Sánchez Hernández 28


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.11 Organizaciones no gubernamentales

La coordinadora nacional de Organizaciones No Gubernamentales (ONGs) desea mantener una base de datos
de las asociaciones de este tipo que existen en nuestro país. Para ello necesita almacenar la información sobre
cada asociación, los socios que las componen, los proyectos que realizan y los trabajadores de las mismas.

• De las asociaciones se desea almacenar su CIF, denominación, dirección y provincia, su tipo (ecologista,
integración, desarrollo, etc), así como si está declarada de utilidad pública por el Ministerio del Interior.
• Cada asociación está formada por socios de los que se precisa conocer su NIF, nombre, dirección, provin-
cia, fecha de alta en la asociación, la cuota mensual con que colaboran y la aportación anual que realizan
(que se obtendrá multiplicando la cuota mensual por los meses del año).
• Los trabajadores de estas organizaciones pueden ser de dos tipos: asalariados y voluntarios.
• Los asalariados son trabajadores que cobran un sueldo y ocupan cierto cargo en la asociación. Se desea
almacenar la cantidad que éstos pagan a la seguridad social y el tanto por ciento de IRPF que se les des-
cuenta.
• Los voluntarios trabajan en la organización desinteresadamente, siendo preciso conocer su edad, profe-
sión y las horas que dedican a la asociación a efectos de cálculo de estadísticas.
• Cada trabajador se identifica por su NIF, tiene un nombre y una fecha de ingreso.
• Un socio no puede ser trabajador de la asociación.
• Las asociaciones llevan a cabo proyectos. De cada proyecto se desea almacenar su número de identifica-
ción dentro de la asociación, en qué país se lleva a cabo y en qué zona de éste, así como el objetivo que
persigue y el número de beneficiarios a los que afecta. Un proyecto se compone a su vez de subproyectos
que tienen entidad de proyectos, es decir, un proyecto puede ser un subproyecto de otro proyecto.

José Juan Sánchez Hernández 29


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.12 Venta de cocinas

Una empresa dedicada a comercializar cocinas desea aumentar su control sobre los elementos que le afectan.
Del resultado del análisis se obtienen los siguientes datos:

• Hay una serie de fabricantes de muebles de cocina. De cada fabricante se dispone de un nombre, una
dirección, un teléfono y un código de fabricante. Cada uno de ellos fabrica varios muebles de cocina. Un
mueble de cocina tiene un determinado color, unas dimensiones dadas (ancho, alto, largo), un código de
mueble y además puede ser de alguno de los siguientes tipos: mueble alto, mueble bajo, panel y encimera.
De los muebles bajos interesa conocer la altura sobre el suelo y de las encimeras interesa saber el tipo de
material (mármol, aglomerado, etc).
• Cada fabricante puede trabajar con varios distribuidores y un distribuidor también puede trabajar con
varios fabricantes. De un distribuidor conocemos su nombre, dirección, teléfono y un código de distribui-
dor.
• Una cocina está compuesta por una serie de muebles de distinto tipo. Cada tipo de mueble puede formar
parte de una única cocina. De una cocina nos interesa saber los muebles que la componen, así como
cuántos muebles hay de cada tipo. Una cocina se identifica por un código único.
• Cada cocina la puede vender un único distribuidor en una determinada fecha de venta, aunque cada
distribuidor puede vender varias cocinas.
• Cada cocina la debe montar al menos un montador, y el mismo montador puede montar varias cocinas.
De un montador nos interesa conocer su NIF, nombre, dirección, número de teléfono y el número de co-
cinas que ha montado.
• Una cocina puede ser comprada por uno o varios clientes, y el mismo cliente puede comprar varias coci-
nas. De un cliente nos interesa conocer su NIF, nombre, dirección y número de teléfono.

José Juan Sánchez Hernández 30


Unidad Didáctica 2. Diseño de bases de datos relacionales IES Celia Viñas (Almería) - 2019/2020

1.13 Gestión de nóminas

Una empresa decide informatizar su nómina. Disponemos de la siguiente información:

• A cada empleado se le entregan múltiples justificantes de nómina a lo largo de su vida laboral en la em-
presa y al menos uno mensualmente.
• A cada empleado se le asigna un número de matrícula en el momento de su incorporación a la empresa,
y éste es el número usado a efectos internos de identificación. Además, se registran el NIF del empleado,
nombre, número de hijos, porcentaje de retención para Hacienda, datos de cuenta corriente en la que se
le ingresa el dinero (banco, sucursal y número de cuenta) y departamentos en los que trabaja. Un emplea-
do puede trabajar en varios departamentos y en cada uno de ellos trabajará con una función distinta.
• De un departamento se mantiene el nombre y cada una de sus posibles sedes. El nombre del departa-
mento será único.
• Son datos propios de un justificante de nómina el ingreso total percibido por el empleado y el descuento
total aplicado. La distinción entre dos justificantes de nómina se hará, además de mediante el número de
matrícula del empleado, mediante el ejercicio fiscal y número de mes al que pertenece y con un número
de orden en el caso de varios justificantes de nómina recibidos el mismo mes.
• Cada justificante de nómina consta de varias líneas (al menos una de ingresos) y cada línea se identifica
por un número de línea del correspondiente justificante. Una línea puede corresponder a un ingreso o a
un descuento. En ambos casos, se recoge la cantidad que corresponde a la línea (en positivo si se trata
de un ingreso o en negativo si se trata de un descuento), en el caso de los descuentos se recoge la base
sobre la cual se aplica y el porcentaje que se aplica para el cálculo de estos.
• Toda línea de ingreso de un justificante de nómina responde a un único concepto retributivo. En un mismo
justificante, puede haber varias líneas que respondan al mismo concepto retributivo. De los conceptos
retributivos se mantiene un código y una descripción.
• De cara a la contabilidad de la empresa, cada línea de un justificante de nómina se imputa al menos a un
elemento de coste. Al mismo elemento de coste pueden imputársele varias líneas. Para cada elemento
de coste, se recoge un código, una descripción y un saldo.
• Entre los elementos de coste se establece una jerarquía, en el sentido de que un elemento de coste puede
contener a otros elementos de coste, pero un elemento de coste sólo puede estar contenido en, a lo sumo,
otro elemento de coste.
• En determinadas fechas, que se deben recoger, cada elemento de coste se liquida con cargo a varios
apuntes contables (código y cantidad) y a una o varias transferencias bancarias, de las que se recogen los
datos de cuenta corriente (banco, sucursal y número de cuenta) y la cantidad. Por cada apunte contable
y transferencia bancaria se pueden liquidar varios elementos de coste.

José Juan Sánchez Hernández 31


Capítulo 2

Créditos

Muchos de los ejercicios y diagramas que aparecen en este texto han sido extraídos de las siguientes referen-
cias:

• Diseño de Bases de Datos. Problemas resueltos. Ra-Ma. Adoración de Miguel. Paloma Martínez. Elena
Castro.

• Desarrollo de Bases de Datos. Casos prácticos desde el análisis a la implementación. Ra-Ma. Dolo-
res Cuadra. Elena Castro. Ana Mª Iglesias. Paloma Martínez. Fco. Javier Calle. César de Pablo. Harith Al-
Jumaily. Lourdes Moreno. Sonia García Manzano. José Luis Martínez. Jesica Rivero. Isabel Segura.

• Introducción a la Informática. Licenciado en ADE. UPV. Miguel Rebollo, Javier Martín, Álvaro Hermida y
Mario González.

• Gestión de Bases de Datos. José Antonio Muñoz Jiménez.

¡Gracias por compartir vuestro trabajo! :)

32
Capítulo 3

Licencia

El contenido de esta web está bajo una licencia de Creative Commons Reconocimiento-NoComercial-
CompartirIgual 4.0 Internacional.

33

También podría gustarte