Prctica 2 Diseo y manipulacin de datos Debora Rubio Soliva
Dbora Rubio Soliva - Proyectos
1. Realizar el diseo de una base de datos, con al menos 5
tablas. a) Realizar el dibujo de las tablas y las relaciones con SQL Power Arquitecte.
b) Obtener el cdigo SQL que genera el programa. Modificarlo si
algo no es correcto y ejecutarlo en la base de datos topo, para crear las tablas y las relaciones. CREATE SEQUENCE filmopedia.genero_id_genero_seq; CREATE TABLE filmopedia.Genero ( TipoGenero VARCHAR NOT NULL, ID_genero INTEGER NOT NULL DEFAULT nextval('filmopedia.genero_id_genero_seq'), CONSTRAINT genero_pk PRIMARY KEY (TipoGenero) );
ALTER SEQUENCE filmopedia.genero_id_genero_seq OWNED BY filmopedia.Genero.ID_genero;
ALTER SEQUENCE filmopedia.oscar_id_oscar_seq OWNED BY filmopedia.Oscar.ID_oscar;
CREATE TABLE filmopedia.Director ( nombre_director VARCHAR NOT NULL, edad INTEGER NOT NULL, pais VARCHAR(15) NOT NULL, CONSTRAINT director_pk PRIMARY KEY (nombre_director) );
Dbora Rubio Soliva - Proyectos
CREATE TABLE filmopedia.Pelicula ( titulo VARCHAR NOT NULL, director VARCHAR NOT NULL, genero VARCHAR NOT NULL, oscar VARCHAR NOT NULL, year INTEGER NOT NULL, CONSTRAINT pelicula_pk PRIMARY KEY (titulo) );
CREATE TABLE filmopedia.Actor (
nombre_actor VARCHAR NOT NULL, pais VARCHAR(15) NOT NULL, sueldo INTEGER NOT NULL, CONSTRAINT actor_pk PRIMARY KEY (nombre_actor) );
CREATE TABLE filmopedia.Rel_actor_oscar (
nombre_actor VARCHAR NOT NULL, TipoOscar VARCHAR NOT NULL, CONSTRAINT rel_actor_oscar_pk PRIMARY KEY (nombre_actor, TipoOscar) );
CREATE TABLE filmopedia.Rel_actor_pelicula (
nombre_actor VARCHAR NOT NULL, titulo VARCHAR NOT NULL, CONSTRAINT rel_actor_pelicula_pk PRIMARY KEY (nombre_actor, titulo) );
ALTER TABLE filmopedia.Pelicula ADD CONSTRAINT genero_pelicula_fk
FOREIGN KEY (genero) REFERENCES filmopedia.Genero (TipoGenero) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE; ALTER TABLE filmopedia.Pelicula ADD CONSTRAINT oscar_pelicula_fk FOREIGN KEY (oscar) REFERENCES filmopedia.Oscar (TipoOscar) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE; ALTER TABLE filmopedia.Rel_actor_oscar ADD CONSTRAINT oscar_rel_actor_oscar_fk FOREIGN KEY (TipoOscar) REFERENCES filmopedia.Oscar (TipoOscar) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE; ALTER TABLE filmopedia.Pelicula ADD CONSTRAINT director_pelicula_fk FOREIGN KEY (director) REFERENCES filmopedia.Director (nombre_director) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE; ALTER TABLE filmopedia.Rel_actor_pelicula ADD CONSTRAINT pelicula_rel_actor_pelicula_fk
Dbora Rubio Soliva - Proyectos
FOREIGN KEY (titulo) REFERENCES filmopedia.Pelicula (titulo) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE; ALTER TABLE filmopedia.Rel_actor_pelicula ADD CONSTRAINT actor_rel_actor_pelicula_fk FOREIGN KEY (nombre_actor) REFERENCES filmopedia.Actor (nombre_actor) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE; ALTER TABLE filmopedia.Rel_actor_oscar ADD CONSTRAINT actor_rel_actor_oscar_fk FOREIGN KEY (nombre_actor) REFERENCES filmopedia.Actor (nombre_actor) ON DELETE NO ACTION ON UPDATE NO ACTION NOT DEFERRABLE;
c) En el diseo se deben utilizar tablas e integridad referencial, es
decir, si en una tabla se ha de poner el tipo de trabajo, esa tabla debe hacer referencia a otra donde se listen los tipos de trabajo posibles, y lo mismo para el aparato utilizado. 2. Debe haber al menos una relacin muchos a muchos. La relacin muchos a muchos en este ejemplo creado es en la relacin de las tablas Actor/Oscar, ya que un actor puede tener muchos Oscars y un mismo Oscar lo pueden tener muchos actores; para ello se ha necesitado una tabla nueva que interrelaciona estas dos tablas con los campos identificativos de cada tabla.
Lo mismo sucede con las tablas Actor y Pelcula, ya que muchos
actores pueden aparecer en muchas pelculas y a su vez, muchas pelculas pueden contar con la participacin de muchos actores.
Dbora Rubio Soliva - Proyectos
3. Insertar, al menos, tres registros por tabla.
Los podramos insertar directamente en PgAdmin III o desde la consola de Windows. Se ha hecho mediante el segundo mtodo, siempre insertando en los campos que se necesiten en las tablas donde exista integridad referencial: insert into filmopedia.Genero(TipoGenero) values ('Accin'); insert into filmopedia.Genero(TipoGenero) values ('Drama'); insert into filmopedia.Genero(TipoGenero) values ('Romance'); insert into filmopedia.Genero(TipoGenero) values ('Aventura'); insert into filmopedia.Genero(TipoGenero) values ('Comedia'); insert into filmopedia.Oscar(TipoOscar) values ('Nominado'); insert into filmopedia.Oscar(TipoOscar) values ('Mejor pelicula'); insert into filmopedia.Oscar(TipoOscar) values ('Mejor actor'); insert into filmopedia.Oscar(TipoOscar) values ('Mejor director'); insert into filmopedia.Director(nombre_director,edad,pais) values ('John Avildsen',7,'EEUU'); insert into filmopedia.Director(nombre_director,edad,pais) values ('James Cameron',6,'Canad'); insert into filmopedia.Director(nombre_director,edad,pais) values ('Ridley Scott',7,'UK'); insert into filmopedia.Pelicula(titulo,director,genero,oscar,year) values ('Rocky','John Avildsen','Accin','Mejor pelicula',1976); insert into filmopedia.Pelicula(titulo,director,genero,oscar,year) values ('Titanic','James Cameron','Romance','Mejor pelicula',1997); insert into filmopedia.Pelicula(titulo,director,genero,oscar,year) values ('Gladiator','Ridley Scott','Aventura','Mejor pelicula',2000); insert into filmopedia.Actor(nombre_actor,pais,sueldo) values('Sylvester Stallone','EEUU',150000); insert into filmopedia.Actor(nombre_actor,pais,sueldo) values('Leonardo DiCaprio','EEUU',350000); insert into filmopedia.Actor(nombre_actor,pais,sueldo) values('Rusell Crowe','Nueva Zelanda',200000); insert into filmopedia.Rel_actor_oscar(nombre_actor,TipoOscar) values ('Sylvester Stallone','Nominado'); insert into filmopedia.Rel_actor_oscar(nombre_actor,TipoOscar) values ('Leonardo DiCaprio','Nominado'); insert into filmopedia.Rel_actor_oscar(nombre_actor,TipoOscar) values ('Rusell Crowe','Mejor actor'); insert into filmopedia.Rel_actor_pelicula(nombre_actor,titulo) values ('Sylvester Stallone','Rocky'); insert into filmopedia.Rel_actor_pelicula(nombre_actor,titulo) values ('Leonardo DiCaprio','Titanic');
Dbora Rubio Soliva - Proyectos
insert into filmopedia.Rel_actor_pelicula(nombre_actor,titulo) values ('Rusell Crowe','Gladiator');
4. Realizar varios actualizados de tablas, por lo menos tres.
Aadimos una columna nueva, donde calcular el iva que tiene que pagar cada actor de su sueldo:
La edad de cada uno de los directores la actualizamos y la
multiplicamos por 10:
Cambiamos el nombre del pas de cada actor:
5. Realizar al menos seis consultas donde intervenga ms de
una tabla, al menos una de cada una de las siguientes: cross join, left join. Mostramos un ejemplo de cada uno de las siguientes consultas:
Dbora Rubio Soliva - Proyectos
-
Cross join
Left join
6. Realizar una vista que enlace varias tablas.
En esta vista, queremos juntar el nombre del actor, la pelcula en la que particip y si por esa pelcula se llev algn tipo de galardn. Por lo que de la tabla Rel_actor_oscar (RAO) obtendremos el galardn, de la tabla Rel_actor_pelicula (RAP) la pelcula donde particip y ambas las relacionamos por el nombre, comn.