Reglas para la transformación del modelo E-R al modelo lógico

1.- Cada entidad se transforma en una tabla

2.- Cada tabla tiene una clave principal. Puede ser una clave natural o subrogada, pero aconsejamos poner una clave principal subrogada con idnombretabla

3.- Las relaciones se tranforman así:

1-N El campo clave de la tabla de la parte '1' de la relación se pone como campo en la tabla de la parte 'N'

N-N Se crea una tabla intermedia con los campos claves de las dos tablas como campos y opcionalmente (aunque yo lo recomiendo) un campo clave propìo.

4.- Se ponen los atributos con sus tipos donde corresponda, sea en la relación o sea en la tabla.

Más ejercicios modelo entidad relación

Acabas de empezar tu colección de películas y quieres hacer una base de datos para construir su ficha técnica. De cada película, necesitas su título, año, nacionalidad y algunos datos de su director: el nombre, la fecha de nacimiento y su país de origen. Además, quieres saber su idioma, si es en blanco y negro o en color, si tiene alguna restricción de edad, un resumen y poder poner tus propias observaciones.

La ficha técnica de cada película también debe incluir el reparto de actores, donde aparecerá su nombre, su nacionalidad y el nombre del personaje que tiene en la película.

 

 

Se desea crear una base de datos que contenga información sobre las revistas a las que estás suscrito o compras habitualmente. De cada revista, se pide su título, el ISSN (un código que identifica a la publicación), el número y el año de publicación. También se desea almacenar información de cada uno de los artículos publicados: el título, la página de inicio y la página de fin. Se asume que no hay dos artículos con el mismo título.

Cada artículo puede estar escrito por varios autores, de quienes interesa conocer su nombre, una dirección de correo electrónico y su país de nacimiento, así como un número que indique la posición en la que aparece en cada artículo: un 1 si es el primer autor, un 2 si aparece en segundo lugar, etc.

 

 

Una ONG desea elaborar una base de datos para llevar el seguimiento de todos sus proyectos. Tiene diversas sedes en varios países que se encargan de gestionar y coordinar los proyectos de ese país, cada uno de los cuales puede afectar a una o varias poblaciones.

Sobre la sedes se desea mantener un identificador, la ciudad y país en el que se encuentra, junto con su dirección, un teléfono de contacto y el nombre del director. Cada sede gestiona un conjunto de proyectos, con un código, un título, fechas de inicio y finalización, el presupuesto asignado y el nombre del responsable.

De cada proyecto es necesario conocer qué actuaciones se realizan en cada población, almacenando el nombre, país y nº de habitantes y un identificador para diferenciarlas. Además se desea la inversión del proyecto que corresponde a la población y una pequeña descripción de la actuación.

 

Un parque zoológico quiere construir una BD para organizar las especies que posee y los distintos itinerarios para visitar el parque. La información se estructura de la siguiente forma. De las especies, se desea conocer su nombre común y su nombre científico, así como una descripción general y una fotografía. Cada especie puede vivir en distintos hábitats naturales, definidos por su nombre, clima y vegetación predominante. Cada especie tiene asociado un índice de vulnerabilidad dentro de cada hábitat, que mide el riesgo de extinción de la especie en el dicho hábitat. Para organizar las visitas, y en función de los hábitats que desee recorrer un visitante, el parque le ofrece una serie de recorridos por los hábitats, que se identifican por su código y se caracterizan por su duración estimada, longitud y número máximo de visitantes permitidos. Un hábitat sólo puede formar parte de un itinerario.

 

Una compañía aérea necesita una base de datos para registrar la información de sus vuelos. Los vuelos están caracterizados por un Id, la fecha y los aeropuertos de origen y destino. Cada vuelo es realizado por un avión. Los aviones tienen una matrícula que los identifica, el fabricante, un modelo e información sobre su capacidad (número máximo de pasajeros) y autonomía de vuelo (en horas). La tripulación asignada al vuelo está formada por el personal de la propia compañía. De cada trabajador se conoce su id, su nombre y su categoría profesional, así como el puesto que ocupa en cada vuelo en particular.

Por último, para cada vuelo, se almacena la lista completa de pasajeros, con su dni, el nombre, el asiento que ocupa y su clase (turista, primera o business).

Ejercicio academia

Crear un diseño entidad relación que permita controlar el sistema de información de una academia de cursos siguiendo estas premisas:

  • Se dan clases a trabajadores y desempleados. Los datos que se almacenan de los alumnos son el DNI, dirección, nombre, teléfono y la edad
  • Además de los que trabajan necesitamos saber el CIF, nombre, teléfono y dirección de la empresa en la que trabajan
  • Los cursos que imparte la academia se identifican con un código de curso. Además se almacena el programa del curso, las horas de duración del mismo, el título y cada vez que se imparte se anotará las fechas de inicio y fin del curso junto con un número concreto de curso (distinto del código) y los datos del profesor o profesora (sólo uno por curso) que son: dni, nombre, apellidos, dirección y teléfono
  • Se almacena la nota obtenida por cada alumno en cada curso teniendo en cuenta que un mismo alumno o alumna puede realizar varios cursos y en cada cual obtendrá una nota.

Ejemplos BD

En un centro de salud un médico atiende a varios pacientes y cada paciente está asignado a un solo médico. Cada médico pasa consulta en una o varias salas en horario distinto. En cada sala pasan consulta varios médicos.

a. Del médico interesan conocer sus datos personales y el año en que se colegio.

b. De la sala interesa conocer su ubicación, además se identifica por un nº de sala

c. Del paciente, además de sus datos personales, se desea conocer su historial médico.

d. Se desea saber en qué sala pasa consulta cada médico en cada momento.

 

Se desea diseñar una BD para una Universidad que contenga información sobre carreras y asignaturas que se pueden estudiar. Además se incluirá la información de los alumnos matriculados en las correspondientes asignaturas y las calificaciones que obtienen en las asignaturas en las que están matriculados. Nota: suponer que una asignatura solo puede pertenecer a una carrera.

 

 

En una autoescuela hay varios profesores y varios coches de prácticas. Se quiere guardar información respecto a los alumnos que se matriculan, el profesor que se les asigna y el coche que conducirán. Cada alumno da clase con un profesor en un coche, el alumno siempre va a conducir el mismo coche y con el mismo profesor.
Se desea diseñar una base de datos para almacenar y gestionar la información empleada por una empresa dedicada a la venta de automóviles, teniendo en cuenta los siguientes aspectos La empresa dispone de una serie
de coches para su venta. Se necesita conocer la matricula, marca y modelo, el color y el precio de venta de cada coche.Los datos que interesa conocer de cada cliente son el NIF, nombre, dirección, ciudad y numero de teléfono: ademas, los clientes se diferencian por un código interno de la empresa.  Un cliente puede comprar tantos coches como desee a la empresa. Un coche determinado solo puede ser comprado por un único cliente.

 

 

En la biblioteca del centro se manejan fichas de autores y libros. En la ficha de cada autor se tiene el código de autor y el nombre. De cada libro se guarda el código. titulo, ISBN, editorial y numero de pagina. Un autor puede escribir varios libros, y un libro puede ser escrito por varios autores. Un libro esta formado por ejemplares.
Cada ejemplar tiene un código y una localización Un libro tiene muchos ejemplares y un ejemplar pertenece solo a un libro. Los usuarios de la biblioteca del centro también disponen de ficha en la biblioteca y sacan ejemplares
de ella. De cada usuario se guarda el código, nombre. dirección y teléfono. Los ejemplares son prestados a los usuarios. Un usuario puede tomar prestados varios ejemplares, y un ejemplar puede ser prestado a varios usuarios. De cada prestamos interesa guardar la fecha de préstamo y la fecha de devolución.

Procedimientos almacenados

Ejemplos de procedimientos almacenados

CREATE DEFINER=`root`@`localhost`
 PROCEDURE film_in_stock
 (IN p_film_id INT, IN p_store_id INT,
 OUT p_film_count INT)
 READS SQL DATA
BEGIN
 SELECT inventory_id
 FROM inventory
 WHERE film_id = p_film_id
 AND store_id = p_store_id
 AND inventory_in_stock(inventory_id);

 SELECT FOUND_ROWS() INTO p_film_count;
END

call film_in_stock(123,1,@w);
select @w

CREATE DEFINER=`root`@`localhost` PROCEDURE 
`actores_por_categoria`
(in p_categoria varchar(50))
BEGIN
select distinct concat(first_name,' ',last_name) actor 
from actor join film_actor using (actor_id)
join film using (film_id)
join film_category using (film_id)
join category c using (category_id)
where c.name=p_categoria
order by actor;

END

call actores_por_categoria('Animation')

Crear funciones

Ejemplos:

CREATE DEFINER=`root`@`localhost` 
FUNCTION `inventory_in_stock`(p_inventory_id INT)
 RETURNS tinyint(1)
 READS SQL DATA
BEGIN
 DECLARE v_rentals INT;
 DECLARE v_out INT;
 SELECT COUNT(*) INTO v_rentals
 FROM rental
 WHERE inventory_id = p_inventory_id;

 IF v_rentals = 0 THEN
 RETURN TRUE;
 END IF;

 SELECT COUNT(rental_id) INTO v_out
 FROM inventory LEFT JOIN rental USING(inventory_id)
 WHERE inventory.inventory_id = p_inventory_id
 AND rental.return_date IS NULL;

 IF v_out > 0 THEN
 RETURN FALSE;
 ELSE
 RETURN TRUE;
 END IF;
END

select inventory_in_stock(30)

CREATE DEFINER=`root`@`localhost`
 FUNCTION `clientes_por_pais`
 (p_country varchar(50)) RETURNS int(11)
BEGIN
declare total int;

SELECT count(customer_id) into total
 FROM sakila.country
left join city using (country_id)
left join address using (city_id)
left join customer using (address_id)
where country=p_country
group by country;

RETURN total;
END

select clientes_por_pais('Algeria')

CREATE DEFINER=`root`@`localhost` FUNCTION `peliculas_por_actor`(p_actor_id int) RETURNS int(11)
BEGIN

declare total int;

select count(film_id) into total from film join
film_actor using (film_id)
join actor using(actor_id)
where actor.actor_id=p_actor_id;

RETURN total;
END

select peliculas_por_actor(1)

CREATE DEFINER=`root`@`localhost` 
FUNCTION `total_ventas`() RETURNS decimal(10,2)
BEGIN
declare total decimal(10,2);
select sum(amount) into total from payment;
RETURN total;
END


Ejercicios entidad relación

Crear un diseño entidad relación que permita controlar el sistema de información de una academia de cursos siguiendo estas premisas:

  • Se dan clases a trabajadores y desempleados. Los datos que se almacenan de los alumnos son el DNI, dirección, nombre, teléfono y la edad
  • Además de los que trabajan necesitamos saber el CIF, nombre, teléfono y dirección de la empresa en la que trabajan
  • Los cursos que imparte la academia se identifican con un código de curso. Además se almacena el programa del curso, las horas de duración del mismo, el título y cada vez que se imparte se anotará las fechas de inicio y fin del curso junto con un número concreto de curso (distinto del código) y los datos del profesor o profesora (sólo uno por curso) que son: dni, nombre, apellidos, dirección y teléfono
  • Se almacena la nota obtenida por cada alumno en cada curso teniendo en cuenta que un mismo alumno o alumna puede realizar varios cursos y en cada cual obtendrá una nota.

Se trata de crear una base de datos sobre un almacén de piezas de modo que:

  • Cada pieza se identifica con dos letras (tipo, por ejemplo TU=tuerca) y un número (modelo, por ejemplo 6)
  • Almacenamos un atributo que permite saber la descripción de cada tipo de pieza. Es decir el tipo TU tendrá la descripción tuerca.
  • Necesitamos conocer el precio al que vendemos cada pieza.
  • Además hay piezas que se componen de otras piezas, por ejemplo una puerta se compone de una hoja de madera, una bisagra y un picaporte. Incluso una pieza puede estar compuesta de otras piezas que ha su vez pueden estar compuestas por otras y así sucesivamente
  • Tenemos una serie de almacenes de los que guardamos su número, descripción, dirección y el nombre de cada estantería de almacén. Cada estantería se identifica por tres letras.
  • Necesitaremos saber la cantidad de piezas que tenemos en cada almacén y saber en qué estanterías están las piezas buscadas

Crear el esquema entidad/relación que represente el organigrama de una empresa, de modo que:

  • Aparezcan los datos de todos los empleados y empleadas: dni, nº de seguridad social, código de trabajador, nombre, apellidos, dirección, teléfono y departamento en el que trabajan indicado por su código y nombre.
  • También hay que tener en cuenta que cada trabajador puede tener un responsable (que en realidad es otro trabajador)
  • Los departamentos poseen un único coordinador del mismo
  • Necesitamos almacenar la categoría profesional de los trabajadores y trabajadoras, teniendo en cuenta que la categoría a veces cambia al cambiar el contrato, de los contratos se almacena la fecha de inicio del mismo y la fecha final (un contrato en vigor tendrá como fecha final el valor nulo).
  • También controlaremos las nóminas que ha recibido el trabajador de las que sabemos la fecha, el salario y a qué trabajador van dirigidas y la categoría del mismo.

Crear el esquema entidad/relación que permita gestionar reservas de vuelos, de modo que:

  • Los clientes pueden reservar vuelos. Con la reserva se pueden reservar varias plazas, pero no poseeremos el número de asiento hasta obtener la tarjeta de embarque. En ese instante se asignará el asiento que tiene como identificación la fila, columna y la planta en la que está situado.
  • Se pueden obtener tarjetas de embarque sin tener reserva
  • Las tarjetas de embarque se refieren a un único cliente. De modo que aunque reserváramos nueve plazas, cada cliente podrá sacar su tarjeta de embarque indicando el número de reserva, la fecha de la misma y sus datos personales (dni, nombre, apellidos, dirección y teléfono). Además la persona que reserva debe indicar una tarjeta de crédito que quedará asociada a esa persona.
  • El vuelo que se reserva tiene un código único, una fecha y una hora de salida y de llegada y un aeropuerto de salida y otro de llegada
  • Los aeropuertos poseen un código único, además del nombre y la localidad y el país en el que se encuentran
  • Se guarda información sobre los aviones, código y número de plazas. Los vuelos sólo les puede realizar un avión determinado, pero el mismo avión puede realizar (como es lógico) otros vuelos

Realizar un esquema entidad/relación que permita modelar el sistema de información de una empresa de software atendiendo las siguientes premisas

  • La empresa crea proyectos para otras empresas. De dichas empresas se almacena el CIF, nombre, dirección y teléfono así como un código interno de empresa.
  • Los proyectos se inician en una determinada fecha y finalizan en otra. Además al planificarle se almacena la fecha prevista de finalización (que puede no coincidir con la finalización real)
  • Los proyectos los realizan varios trabajadores, cada uno de ellos desempeña una determinada profesión en el proyecto (analista, jefe de proyecto, programador,…), dicha profesión tiene un código de profesión. En el mismo proyecto puede haber varios analistas, programadores,…
  • Todos los trabajadores tienen un código de trabajador, un dni, un nombre y apellidos. Su profesión puede cambiar según el proyecto: en uno puede ser jefe y en otro un programador
  • Se anota las horas que ha trabajado cada trabajador en cada proyecto.
  • Puede haber varios proyectos que comiencen el mismo día.
  • A todas las empresas les hemos realizado al menos un proyecto
  • Todos los trabajadores han participado en algún proyecto
  • En la base de datos, la profesión “administrador de diseño” no la ha desempeñado todavía ningún trabajador o trabajadora

Crear un diseño entidad/relación que permita modelar un sistema que sirva para simular el funcionamiento de una red social, teniendo en cuenta lo siguiente:

  • Los usuarios de la red social se identifican con un identificador y una contraseña. Además se almacena de ellos:
    • Su nombre, apellidos, dirección, teléfono (puede tener varios teléfonos) e e-mail (el e-mail no tiene que poder coincidir con el de otro usuario) y una foto
    • Si los usuarios son celebridades, de ellos no aparecerá ni el email ni la dirección ni el teléfono.
  • Los usuarios pueden tener una serie de contactos, que en realidad son otros usuarios. De cada contacto se puede almacenar un comentario que es personal y que sirve para describir al contacto.
  • Los usuarios pueden organizar sus contactos en grupos de los cuales se almacena un nombre y deberemos saber los contactos que contiene. El mismo contacto puede formar parte de varios grupos.
  • Además cada usuario puede tener una lista de usuarios bloqueados a fin de que no puedan contactar con él
  • Los usuarios pueden publicar en la red comentarios, los cuales se puede hacer que los vea todo el mundo, que los vea uno o varios de los grupos de contactos del usuario o bien una lista concreta de usuarios. Los comentarios pueden incluir un texto y una imagen.