Está en la página 1de 17

PRÁCTICA 3.

4-05-2020

DE FUNDAMENTOS DE BASE DE DATOS

UNIDAD 3

Nombre del estudiante: ______ ______________________________

Se desea diseñar una base de datos relacional que almacene la información sobre los
préstamos de las películas de un vídeo club. En la actualidad la gestión de esta información se
lleva cabo del siguiente modo: Cuando se hace un préstamo se rellena una ficha en la que se
anota el socio que se lleva la película, la fecha y el número de la cinta que se lleva, que es único
(de cada película hay varias copias en cintas distintas). Esta ficha se deposita en el archivador
de películas prestadas.

Cuando el socio devuelve la cinta, la ficha se pasa al archivador de películas devueltas. El


vídeo club tiene, además, un archivador con fichas de películas ordenadas por título; cada
ficha tiene además el género de la película (comedia, terror, ...), su director y los nombres de
los actores que intervienen. También se tiene un archivador con las fichas de los socios,
ordenadas por el código que el vídeo club les da cuando les hace el carné; cada ficha tiene el
nombre del socio, su dirección y teléfono, los nombres de sus directores favoritos, los nombres
de sus actores favoritos y los géneros cinematográficos de su preferencia. Cuando un socio
quiere tomar prestada una película de la que no hay copias disponibles, se le puede anotar en
la lista de espera de esa película. Cada vez que se devuelve una película, se comprueba si hay
alguien en su lista de espera, y si es así se llama por teléfono al primer socio de la lista para
decirle que ya puede pasar a recogerla, borrándolo después de la lista.

Paso 1 Clasificación de la información. En este paso es importante seleccionar la información


relevante de la problemática identificando cuál se va a modelar y cuál se programa.

Socio
Fecha
préstamos Numero de cinta (único)

Copias varios() actores(varios)


películas Título
Genero
director

Si se dan cuenta esta tabla no trae indicaciones específicas


de que campos va a llevar, pero es lógico que llevará un
id_prestamo ya que solo se puede devolver un préstamo y
una fecha de devolución.
devoluciones

Código directores favoritos(varios)


socios Nombre actores favoritos(varios)
Dirección géneros de su preferencia(varios)
teléfono

Socio
Lista de espera Película
estado

Con este análisis previo se puede ir clasificando la información y todos los campos que dicen
(varios) en realidad son campos multivaluados y se deben de corregir creando más entidades.
Paso 2 Identificar Entidades. En este caso deben asegurarse de qué cada entidad tenga
atributos que le pertenezcan por ejemplo Películas tiene (título, duración) pero no tiene
prestamos ya que prestamos es un campo multivaluado y debería de ir en otra entidad.

Este paso debe concordar con lo que se analizó en el paso 1; más lo que por lógica deban
agregar.

Antes de establecer la entidad préstamos que es la primera que sale en la problemática se


necesitan películas para prestar por lo que esa será la entidad que se deba establecer primero
con los siguientes campos Copias(varios) , actores(varios), Título, Genero , director. Se tienen
dos campos multivaluados, es decir, puede haber una copia de cada película o más, también
hay varios actores en una película, y para no generar redundancia se crea un catalogo de
géneros. Los campos restantes son simples.

En la tabla películas va una llave foránea id_genero.

En la tabla copias va una llave foránea id_pelicula

El campo des_gen de la tabla generos es unique.

El campo titulo de la tabla peliculas es unique


El rombo ActoresPeli es una nueva entidad que hace la relación entre actores y películas de
muchos a muchos.

Con la información anterior ahora si se pueden realizar los préstamos y se analiza la


cardinalidad, es decir se puede prestar una o más películas, y las películas pueden ser
prestadas una o muchas veces por lo que la cardinalidad es muchos a muchos y se resuelve de
la siguiente manera

La entidad prestamos en la problemática solo tiene Socio, Fecha, Numero de cinta (único),
para que no haya redundancia de datos en lugar de tener un campo socio (nombre ) se hace
un catálogo de socios, es decir una nueva entidad y se necesita también número de cinta que
es el id_copia de la tabla copias de las películas. La solución quedaría de la siguiente manera.

Recuerden que peliculasPrestadas se vuelve otra entidad para evitar redundancia en caso de
que el socio se quiera llevar 10 películas, también recuerden que existe una relación entre
películas y copias, pero como este software es libre solo deja hacer algunos objetos.

Los socios tienen características específicas Código, directores favoritos(varios), Nombre_


actores favoritos(varios) ,Dirección , géneros de su preferencia(varios), teléfono y el modelo
de datos quedarían de la siguiente manera
Para los directores favoritos se hace algo similar, en este paso se pueden dar cuenta que el
campo simple de director en la tabla película no es suficiente ya que debe de existir una lista
de directores para agregar los directores favoritos de los socios. Por lo que se debe modificar y
agregar una foránea de id_director en la entidad películas
Y para los actores favoritos es lo mismo.
Se puede generalizar creando una entidad personas si se desea hacer un ER Extendido.
Quedaría de la siguiente manera

Una vez prestada la película ya se pueden establecer las devoluciones, solo se necesita la fecha
de devolución
Para la lista de espera se tiene el siguiente modelo, se deben relacionar las entidades socio y
película

Con lo antes analizado se tiene un panorama completo para realizar el modelo ER, en este se
establecen la cantidad de entidades y los verbos con el que se van a programar las relaciones.

Paso 3 Establecer las relaciones. Determinar la relación que existe entre cada entidad,
implementar el modelo ER.
Son 14 entidades de las cuáles 12 entidades son débiles y 2 son fuertes, cada rombo pequeño
establece una relación entre dos entidades siendo éstas 17 relaciones. Con modelo Er en mano
se procede a crear la base de datos no sin antes establecer los verbos de las 17 relaciones

Numero Tabla Pk TablaFK Campo con el que se verbo


… relaciona
1 Personas Actores Id_persona Es
2 Personas Socios Id_perosona Son
3 Personas Directores Id_persona Pertenece
4 Directores Peliculas Id_director Trabaja
5 Generos Peliculas Id_genero Tienen
6 Peliculas Copias Id_pelicula Registran
7 Prestamos PeliculasPrestadas Id_prestamo Rentan
8 Copias PeliculasPrestadas Id_copia Prestan
9 Socios Genero_fav Id_socio Gustosociogen
10 Generos Genero_fav Id_genero Gustagenero
11 Actores Actor_fav Id_actor Gustosocioact
12 Socios Actor_fav Id_socio Gustosocio
13 directores Director_fav Id_director Gustodirec
14 socios Director_fav Id_socio Gustosociodir
15 prestamo Devoluciones id_prestamo Se_rentan
s
16 socios ListaEspera id_socio Esperasocio
17 Peliculas ListaEspera Id_pelicula Esperapeli

Paso 4 Crear la base de datos en MySQL u otro gestor que tengan instalado. Colocar los
Query´s de la creación de la base de datos, creación de tablas, relaciones y dos datos en cada
tabla una vez que ya existan las relaciones.

/*Crear y usar la base de datos*/

create database Video_club;

use Video_club;

/*se crean las tablas*/


create table peliculas(id_pelicula int primary key, titulo varchar(70)
unique,id_director int,id_genero int)

create table generos (id_genero int primary key, des_gen


varchar(50)unique);

create table copias (id_copia int primary key, id_pelicula int) ;

create table prestamos(id_prestamo int primary key, fecha


timestamp,id_socio int);

create table devoluciones(id_devolucion int primary key, id_prestamo


int, fecha_dev timestamp);

create table peliculasprestadas (id_peliprestada int primary key,


id_prestamo int, id_copia int);

create table genero_fav(id_generofav int primary key,id_socio int,


id_genero int);

create table actor_fav(id_actorfav int primary key,id_socio int,


id_actor int);

create table director_fav(id_directorfav int primary key,id_socio int,


id_director int);

create table listaespera(id_espera int primary key, fecha_resgistro


timestamp,id_pelicula int, id_socio int, estado varchar(20));

create table personas (id_persona int primary key, nombre varchar(50),


ap_paterno varchar(50),ap_materno varchar(50),dir text,telefono
varchar(10));

create table actores (id_actor int primary key, id_persona int);

create table socios(id_socio int primary key, id_persona int);

create table directores(id_director int primary key, id_persona int);

para verificar si las tablas están creadas se ejecuta el comando

Show table;
Si las foreign key se hacen por separado no es necesario revisar la prioridad de las tablas de lo
contrario se tendrían que crear primero las entidades fuertes (PK) y posteriormente las débiles
(FK).

alter table Actores add constraint foreign key Es (Id_persona) references Personas

(Id_persona);

alter table Socios add constraint foreign key Son (Id_persona)references Personas
(Id_persona);
alter table Directores add constraint foreign key Pertenece
(Id_persona ) references Personas (Id_persona );

alter table Peliculas add constraint foreign key Trabaja


(Id_director)references Directores (Id_director);

alter table Peliculas add constraint foreign key Tienen (Id_genero)


references Generos (Id_genero);

alter table Copias add constraint foreign key Registran (Id_pelicula)


references Peliculas (Id_pelicula);

alter table PeliculasPrestadas add constraint foreign key Rentan


(Id_prestamo) references Prestamos (Id_prestamo);
alter table PeliculasPrestadas add constraint foreign key Prestan
(Id_copia) references Copias (Id_copia) ;

alter table Genero_fav add constraint foreign key Gustosociogen


(Id_socio) references Socios(Id_socio);

alter table Genero_fav add constraint foreign key Gustagenero


(Id_genero) references Generos (Id_genero);

alter table Actor_fav add constraint foreign key Gustosocioact


(Id_actor) references Actores (Id_actor);

alter table Actor_fav add constraint foreign key Gustosocio (Id_socio)


references Socios (Id_socio);

alter table Director_fav add constraint foreign key Gustodirec


(Id_director) references directores (Id_director);

alter table Director_fav add constraint foreign key Gustosociodir


(Id_socio) references socios (Id_socio);

alter table Devoluciones add constraint foreign key Se_rentan


(id_prestamo) references prestamos (id_prestamo);

alter table ListaEspera add constraint foreign key Esperasocio


(id_socio) references socios (id_socio);

alter table ListaEspera add constraint foreign key Esperapeli


(Id_pelicula) references Peliculas (Id_pelicula);

Para almacenar los datos se debe comenzar con las entidades fuertes.

Generos
Insert into generos (id_genero,des_gen) values(1,'Terror');
Insert into generos (id_genero,des_gen) values(2,'Drama');

Personas (en esta entidad deben agregarse 6 personas para que 2 sean directores, 2 socios y 2
actores)
insert into personas
(id_persona,nombre,ap_paterno,ap_materno,dir,telefono)
values(100,'Brad','Pit','','Los Ángeles’,’1234456789’);
de aquí en adelante ustedes deberán hacer los insert e ir colocando los querys con los
siguientes datos

PERSONAS

Id_persona nombre Ap_patern Ap-materno dir telefono


o
101 Ramiro López García Vega de las 7223456789
fuentes Avándaro
102 Guadalupe Reyes García Valle de Bravo, 9844567893
colonia Centro
103 Daniel Pérez Delgado Cerro de la bolita, 9834755643
Colorines
104 Carlos Villa Téran Calle de las 3456748338
fuentes No. 24,
Toluca
105 Luisa Coranguez Dominguez Valle de Bravo 2345674545
Fernanda
106 Michael C. Williams E.U. 2334567654
107 Joshua Leonard null California 2345323456
108 Heather Donahue null Los Ángeles 3456432123
109 Angelina Jolie null E.U. 3456545656

ACTORES

Id_acto Id_persona
r
200 100
201 101
202 106
203 107
204 108
205 109

SOCIOS

Id_soci Id_persona
o
202 102
203 103

DIRECTORES

Id_director Id_persona
204 104
205 105
PELICULAS

Id_pelicul titulo Id_director Id_genero


a
300 La Bruja de Blair 204 1
301 Pájaros 204 2
302 La noche de Halloween 204 1
303 El padrino 205 1
304 El pianista 205 2
305 La lista de Schindler 205 1

COPIAS

id_copi Id_pelicula
a
400 300
401 300
402 300
403 300
404 301
405 301
406 302
407 302
408 302
409 303
410 304
411 304
412 305
413 305

GENERO_FAV

Id_generofa Id_socio Id_genero


v
500 202 1
501 202 2
502 203 1

ACTOR_FAV

Id_actorfa Id_socio Id_actor


v
600 202 200
601 202 201
602 202 202
603 202 203
604 202 204
605 203 200
606 203 202
607 203 205

DIRECTOR_FAV

Id_directorfa Id_socio Id_director


v
700 202 204
701 202 205
702 203 205

PRESTAMOS

Id_prestam fecha Id_socio


o
800 12-01-2019 202
801 17-03-2019 202
802 18-05-2020 203
803 30-06-2020 203

PELICULASPRESTADAS

id- Id_prestam Id_copia


peliprestada o
900 800 400
901 800 404
902 800 408
903 801 400
904 801 405
905 802 400
906 803 408
907 803 413

Por el momento devoluciones y lista de espera quedarán pendientes.

Contestar lo siguiente:

1.- Hay un detalle en el almacenamiento de los datos. ¿Podría indicar cuál es el patrón de
datos que ya no se respetó y en qué entidades ?

2.- Cuál es su propuesta de solución para corregir el patrón de datos que no se respetó
CONCLUSIONES:

También podría gustarte