Sunteți pe pagina 1din 18

Facultad de Ingeniera Informtica

Curso: Implementacin y Gestin de Bases de datos

Presentacin de Proyecto
Final
Profesor: Juan Manuel Gutierrez Crdenas
Alumno: Michel Jared Castro Bravo

18 de Octubre de 2016

Descripcin del problema


Loop Cameras:
Loop Cameras es una agencia de castings peruana ubicada en San
Isidro y dedicada a buscar modelos para sus clientes, que por lo general son
grandes cadenas televisivas. Su aparicin en el mercado se remonta a la
dcada de 1990, por lo que actualmente cuenta con gran prestigio frente a
las dems agencias modernas. Debido a sus estndares de calidad y poltica
de operaciones, cada dos aos la empresa se ve obligada a actualizar la
base de datos que emplea. Desde el ao 2004 hasta el 2014 emplearon la
base de datos de SQL Server, pero tomando en cuenta el crecimiento de la
empresa han visto la necesidad de comprar un sistema de base de datos
ms extenso y robusto: han decidido usar una base de datos de Oracle. La
anterior compaa que gestionaba su sistema solo trabajaba con SQL
Server, por lo que, a travs de una recomendacin, nos han contratado a
nosotros, SysMan DB, para crear y gestionar su nueva base de datos. Previo
a la implementacin, se han tomado en cuenta la informacin siguiente para
armar la estructura interna a travs de sentencias DDL:
Un casting se identifica por un cdigo, se caracteriza por un nombre
y una fecha de contratacin; posee un presupuesto y es dirigido por un
agente. Un casting es contratado por un nico cliente- identificado por un
cdigo de cliente- aunque un cliente puede tener contratados varios
castings.
Un casting se estructura en varias fases, identificadas dentro de cada
casting por un nmero en secuencia y a su vez, cada fase se descompone
en varias pruebas individuales identificadas por un nmero de prueba
individual dentro de cada fase. Cada fase tiene una fecha de inicio. De cada
prueba individual se guarda la fecha de realizacin, la hora de inicio y la
hora de finalizacin, as como la sala en la que se realiza. En una sala slo
se realiza una prueba en una determinada fecha entre una hora de inicio y
una hora de fin nicos.
A cada casting se le asigna uno o varios perfiles identificados por un
cdigo de perfil y con una serie de atributos. Los candidatos del casting se
identifican con un cdigo. Importa conocer de ellos el nombre, direccin,
edad, sexo, nmero telefnico y correo de contacto. Cada candidato tiene
un nico perfil, pero un perfil puede corresponder a varios candidatos. Cada
candidato que encaje con el perfil de un casting realiza una prueba
individual y obtiene un resultado que puede ser apto o no apto. Un
candidato puede someterse como mximo a una prueba individual dentro
de cada fase de un casting. En cada prueba individual solo participa un
nico candidato. Cada prueba pertenece slo a una fase del casting. Un

candidato no podr realizar una prueba individual de una fase si en la fase


anterior realiz una prueba cuyo resultado fue no apto.
Por otro lado, un agente es un empleado, al igual que el presidente
de la empresa, un directivo, un administrador o un camargrafo. stos
ltimos son dirigidos por el agente de casting, dependiendo del turno y el
casting que se les asigne. De los empleados interesa conocer el sueldo,
direccin, cargo, cdigo de empleado, telfono, correo de contacto. En un
casting pueden trabajar varios camargrafos y stos pueden trabajar en
varios castings.

Modelo Lgico de Datos

Justificacin del Modelo Lgico de datos:


1) Castings:

Como ya se mencion anteriormente, un casting cuenta con un


cdigo, nombre, fecha de contratacin y presupuesto. Se aaden los
campos FechaInicio y FechaFin porque en la prctica real un
casting cuenta con un perodo lmite de actividad. Se ha tomado en
cuenta el hecho de que un casting es contratado por un nico cliente
(relacin uno a muchos, mandatoria) y es dirigido por un agente (un
agente puede dirigir muchos castings). Existe una relacin muchos a
muchos (normalizada a travs de una tabla de referencia, con clave
primaria compuesta) entre castings y camargrafos, til para ver
qu camargrafos participaron en qu castings. Esto a su vez podra
ser empleado en un futuro para otorgar bonos extra o incentivos no
econmicos, de acuerdo a un posible campo llamado desempeo u
observaciones dentro de la tabla Camarografo_Castings, pero que
por el momento, para objetivos del trabajo presente, no es necesario.
2) Empleados:
En la tabla Empleado se toma informacin pertinente para la empresa
y til en caso de sondeos nacionales (para responder a qu
porcentaje de empleados son mujeres o cuntos empleados reciben
sueldo por encima de 1500 soles). En el caso de la edad de los
empleados, se opt por el campo FechaNacimiento en lugar de
edad para mayor flexibilidad al momento de actualizar los datos (no
ser necesario actualizar este campo porque la Fecha de nacimiento
es nica). De acuerdo a los cargos: si un empleado tiene el cargo de
agente o camargrafo, este queda registrado en las tablas
respectivas, cuya relacin es de uno a uno. Estas tablas existen para
que sean ms sencillas las relaciones entre Empleados y Castings (se
disuelve la posibilidad de que existan dos o ms relaciones directas
entre estas tablas). Tanto el concepto de agente como el de
camargrafo son dependientes del concepto de empleado. Por ello,
en lugar de tener una clave primaria propia (el nico campo), se tiene
por clave primaria los campos IdAgente y IdCamarografo, que a la vez
son claves forneas que referencian a IdEmpleado.
3) Perfiles:
La existencia de la tabla Perfiles se fundamenta en la necesidad que
tienen los clientes en especificar el tipo o las cualidades de las
personas que requieren como modelos en sus respectivas
organizaciones. Los perfiles funcionan como parmetros de preseleccin, tiles para mostrar al pblico (y a los aspirantes,
principalmente) el tipo de personas que se espera que califiquen el
casting. No es obligatorio que un candidato coincida con el perfil o los
perfiles del casting (no se expulsa o prohbe la participacin a un
aspirante que no coincida con el perfil), slo es ms adecuado. En la
prctica real, una persona elije participar en un casting porque se
considera capaz de ser seleccionada (se tiene que tomar en cuenta

tambin que los castings son principalmente para cadenas


televisivas, por lo cual se necesitan algunas habilidades sociales en
las o los modelos calificados). En ese caso, los perfiles seran detalles
o informacin adicional sobre el casting y los candidatos. La razn por
la cual existe una relacin muchos a muchos entre Castings y Perfil
(normalizada a travs de la tabla Perfil_Casting) es propiamente para
evitar redundancias (un castings puede requerir mltiples perfiles y
un perfil puede pertenecer a mltiples castings), y porque, en un
futuro, la informacin sobre los perfiles requeridos podra ser
empleada para realizar cambios en los objetivos de la empresa
(modificacin de logotipo, de Slogan, creacin de nuevos puestos de
trabajo, etc).
4) Fases y Pruebas:
Cada fase es una etapa del casting y cada prueba individual es la
evaluacin de cada candidato. Una fase se caracteriza por una fecha
de inicio, un nmero de secuencia, el cdigo del casting al que
pertenece y una descripcin. Para el modelo presente se ha
considerado el nmero de secuencia como el orden cardinal que
ocupa la fase dentro de un mismo casting. Este nmero puede
repetirse, dado que todos los castings tienen, por lo menos, una fase
1 y por lo tanto no puede ser la clave primaria. Para diferenciar a
todas las fases entre s se ha considerado la columna IdFase, cuyos
valores son parte de una secuencia creciente automtica (el
equivalente a identity en SQL Server o Auto_numeric en MySQL).
Existe la posibilidad de haber formado una clave primaria compuesta
con las columnas IdCasting y NumSecuencia, pero esto traera
algunos problemas al momento de instanciar la tabla Pruebas: en
lugar de insertar el IdFase (una columna), se insertaran el
IdCasting y el NumSecuencia (2 columnas). A simple vista parece
ms adecuado elegir la segunda opcin por la facilidad de
reconocimiento que la primera por la cantidad de columnas. Para el
usuario que instancia la base de datos sera ms sencillo insertar el
nmero de secuencia en lugar del cdigo de Fase. Este problema
puede ser solucionado a travs de una funcin que trabaje con vistas,
uniendo las tablas Fase y Pruebas con una sentencia DML.
Por otro lado, en la tabla Prueba no se consider la creacin de la
columna IdPrueba (clave candidata) porque, teniendo en cuenta
que cada candidato realiza una nica prueba por fase, para
diferenciar a todas las instancias de la tabla basta con crear una clave
primaria compuesta con las columnas IdFase y IdCandidato, que a
la vez son claves forneas. El campo NumPrueba no forma parte de
la clave primaria y cumple la misma funcin que la columna
NumSecuencia de Fases: representa el orden cardinal de las
pruebas dentro de una misma fase. Con respecto a las salas: stas no
pueden tener horarios de actividad cruzados entre pruebas; es decir,

slo se realiza una prueba en una fecha determinada, entre una hora
de inicio y una de fin. Para disear esta relacin podra usarse una
tabla externa con un cdigo de horario, pero se consider ms
apropiado crear una restriccin UNIQUE uniendo las columnas
FechaRealizacion, HoraInicio y HoraFin en la misma tabla
Prueba.

SCRIPTS
1. Creacin de tablas y restricciones:
create table Empleado(
IdEmpleado number primary key,
NombreEmpleado varchar2(30) not null,
ApellidoEmpleado varchar2(30) not null,
Sexo char(1) not null,
FechaNacimiento date
CHECK (EXTRACT(year FROM FechaNacimiento)
EXTRACT(year FROM sysdate) < 50),
-- Con esta restriccin se limita la edad del empleado
DNI number not null,
EmailEmpleado varchar2(40),
Telefono number,
Cargo char(20),
Sueldo number not null
);
create table Agente(
IdAgente number primary key not null
references empleado(IdEmpleado)
);
create table Cliente(
IdCliente number primary key,
NomCli varchar2(30) not null,
DNI number,
EmailCli varchar2(40) null,
Telefono number
);
create table Castings(
IdCasting number primary key,
NombreCasting varchar2(40) not null,
FechaContratacion date,
Presupuesto number,
FechaInicio date,
FechaFin date,
IdCliente number
references cliente(idcliente),

IdAgente number
references agente(idagente)
);
create table Camarografo(
IdCamarografo number primary key
references empleado(idempleado)
);
create table Camarografo_Casting(
IdCasting number not null
references castings(Idcasting),
IdCamarografo number not null
references camarografo(idcamarografo),
primary key (IdCasting, IdCamarografo)
);
create table Perfil(
IdPerfil number primary key,
NombrePerfil varchar2(30) not null,
Atributos varchar2(200) not null
);
create table Perfil_Casting(
IdCasting number not null
references castings (idcasting),
IdPerfil number not null
references perfil (idperfil),
primary key (idcasting, idperfil)
);
create table Fase(
IdFase number primary key,
IdCasting number
references castings(idcasting),
NumSecuencia number not null,
Descripcion varchar2(50),
FechaInicio date
);
create sequence seq_fase start with 1 increment by 1 cache 100;
create table Candidato(
IdCandidato number primary key,
NombreCandidato varchar2(30) not null,
EmailCandidato varchar2(50), Telefono number,
IdPerfil number references perfil(idperfil)
);
create table Sala(
IdSala number primary key,
NombreSala varchar2(15),
UbicacionSala varchar2(30),
Dimensiones char(10)

CHECK (not Dimensiones = 0x0)


);
create table Prueba(
IdFase number references Fase (idfase),
IdCandidato number
references Candidato (idcandidato),
primary key(IdFase, Idcandidato),
NumPrueba number not null,
FechaRealizacion char(10),
HoraInicio date,
HoraFinalizacion date,
unique (FechaRealizacion, HoraInicio, HoraFinalizacion),
IdSala number references sala(idsala),
EstadoPrueba char(7) not null
CHECK (EstadoPrueba in ("apto", "no apto"))
);

2. Insercin de datos:
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into

Cliente
Cliente
Cliente
Cliente
Cliente
Cliente

values(1001,
values(1002,
values(1003,
values(1004,
values(1005,
values(1006,

"Ana Vasquez", 29384723, "ana@hotmail.com", 987363433);


"Luis Jara", 23894768, "luis@hotmail.com", 923847883);
"Carlos Carrillo", 93847899, "carlos@hotmail.com", 944232342);
"Jennifer Orosco", 23487689, "jeny@hotmail.com", 999278653);
"David Briones", 29384673, "david@hotmail.com", 974632877);
Jazmin Flores", 23487673, "jazmin@hotmail.com", 946782886);

insert into Empleado values(100001, "Alberto", "Ventura", 'M', '12/03/1990', 23487688,


"alberto@hotmail.com",
"Presidente",981237888,6000);
insert
into
Empleado
values(100002,
"Carlos","Roman",'M','12/03/1990',18273689,"carlos@hotmail.com",
"Director Marketing", 978797788,5800);
insert
into
Empleado
values(100003,
"Lourdes","Castro",'F','12/03/1990',18273688,"lourdes@hotmail.com",
"Directora Finanzas",789789789,5800);
insert
into
Empleado
values(100004,
"Michael","Trelles",'M','12/03/1990',28763626,"michael@hotmail.com",
"Director ARH",924534533,5800);
insert into Empleado values(100005, "Paul","Reyes",'M','12/03/1990',12627716,"paul@hotmail.com",
"Jefe de TI", 947823745,5800);
insert
into
Empleado
values(100006,
"Isabel","Ventura",'F','12/03/1990',12983733,"isabel@hotmail.com",
"Administradora DB",964537284,5000);
insert
into
Empleado
values(100007,
"Luis","Cornejo",'M','12/03/1990',28123637,"luis@hotmail.com",
"Agente Casting",946743344,4000);
insert
into
Empleado
values(100008,
"Luisa","Castro",'F','12/03/1990',22376342,"luisa@hotmail.com",
"Agente Casting",999438457,4000);
insert
into
Empleado
values(100009,
"Cecilia","Rojas",'F','12/03/1990',12384768,"cecilia@hotmail.com",
"Camarografo",934754385,3500);
insert
into
Empleado
values(100010,
"Mercedes","Greem",'F','12/03/1990',12983738,"mercedes@hotmail.com",
"Camarografo",934857984,3500);

insert
into
Empleado
"Maria","Ruiz",'F','12/03/1990',23453445,"maria@hotmail.com",
"Agente Casting",934576457,4000);
insert
into
Empleado
"Angie","Vasquez",'F','12/03/1990',34534534,"angie@hotmail.com",
"Agente Casting",934875854,4000);
insert
into
Empleado
"Braulio","Velasquez",'M','12/03/1990',34534534,"braulio@hotmail.com",
"Camarografo",993948575,3500);
insert
into
Empleado
"Renato","Pozo",'M','12/03/1990',22342343,"renato@hotmail.com",
"Camarografo",938475874,3500);
insert
into
Empleado
"Carla","Jaules",'F','12/03/1990',54673234,"carla@hotmail.com",
"Camarografo",999347674,3500);
insert
into
Empleado
"David","Mauro",'M','12/03/1990',74334534,"david@hotmail.com",
"Camarografo",923847834,3500);
insert
into
Empleado
"Andre","Briones",'M','12/03/1990',74345222,"andre@hotmail.com",
"Camarografo",994567565,3500);
insert
into
Empleado
"Angel","Coronel",'M','12/03/1990',34523123,"angel@hotmail.com",
"Camarografo",999485712,3500);
insert
into
Empleado
"Roberto","Puentes",'M','12/03/1990',23563465,"roberto@hotmail.com",
"Camarografo",934674426,3500);
insert
into
Empleado
"Cecilia","Mao",'F','12/03/1990',63552343,"ceciliam@hotmail.com",
"Agente Casting",993498737,4000);
insert
insert
insert
insert
insert

into
into
into
into
into

Agente
Agente
Agente
Agente
Agente

insert
insert
insert
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into
into
into
into

Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo
Camarografo

values(100011,

values(100012,

values(100013,

values(100014,

values(100015,

values(100016,

values(100017,

values(100018,

values(100019,

values(100020,

values(100007);
values(100008);
values(100011);
values(100012);
values(100020);
values(100009);
values(100010);
values(100013);
values(100014);
values(100015);
values(100016);
values(100017);
values(100018);
values(100019);

insert into Perfil values(1,"Extrovertida(o)","Sociabliza, sonre y es participativa(o)");


insert into Perfil values(2,"Divertida","Buen sentido del humor, anima a otros, es respetuosa(o)");
insert into Perfil values(3,"Elegante","Tiene buen gusto por la moda y es educada(o) al momento de
hablar");
insert into Perfil values(4,"Inteligente","Muestra lucidez, fluidez al comunicarse y ser informada(o)");
insert into Perfil values(5,"Lder","Ayuda y motiva a su equipo");
insert into Castings values(10001, "Casting1", TO_DATE('09/01/2014','dd/mm/yyyy'),
TO_DATE('20/04/2014',
'dd/mm/yyyy'),TO_DATE('20/05/2014','dd/mm/yyyy'),1002, 100011);
insert into Castings values(10002, "Casting2", TO_DATE('16/07/2014','dd/mm/yyyy'),
TO_DATE('16/09/2014',
'dd/mm/yyyy'),TO_DATE('10/10/2014','dd/mm/yyyy'),1005, 100007);
insert into Castings values(10003, "Casting3", TO_DATE('12/01/2015','dd/mm/yyyy'),
TO_DATE('12/04/2015',
'dd/mm/yyyy'),TO_DATE('20/05/2015','dd/mm/yyyy'),1006, 100008);
insert into Castings values(10004, "Casting4", TO_DATE('12/04/2015','dd/mm/yyyy'),
TO_DATE('18/06/2015',

20000,

18000,

15000,

17000,

'dd/mm/yyyy'),TO_DATE('18/07/2015','dd/mm/yyyy'),1003, 100020);
insert
insert
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into
into
into

Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting
Perfil_Casting

values(10001,
values(10001,
values(10002,
values(10002,
values(10002,
values(10003,
values(10003,
values(10004,

insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into

Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting
Camarografo_Casting

1);
2);
1);
4);
5);
2);
3);
1);

values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10001,
values(10002,
values(10002,
values(10002,
values(10002,
values(10002,
values(10002,
values(10002,
values(10003,
values(10003,
values(10003,
values(10003,
values(10003,
values(10004,
values(10004,
values(10004,
values(10004,
values(10004,
values(10004,

09);
10);
13);
14);
15);
16);
17);
18);
13);
18);
19);
17);
10);
09);
15);
09);
19);
17);
14);
15);
09);
10);
13);
14);
15);
16);

insert into Fase values(1111111, 10001, 1, "Toma de fotos", TO_DATE('20/04/2014', 'dd/mm/yyyy'));


insert into Fase values(1111112, 10001, 2, "Prueba de modelaje", TO_DATE('21/04/2014',
'dd/mm/yyyy'));
insert into Fase values(1111113, 10001, 3, "Evaluacin social", TO_DATE('23/04/2014',
'dd/mm/yyyy'));
insert into Fase values(1111114, 10001, 4, "Entrevista final", TO_DATE('24/04/2014', 'dd/mm/yyyy'));
insert into Fase values(1111115, 10002, 5, "Toma de fotos", TO_DATE('16/09/2014', 'dd/mm/yyyy'));
insert into Fase values(1111116, 10002, 1, "Prueba de modelaje", TO_DATE('18/09/2014',
'dd/mm/yyyy'));
insert into Fase values(1111117, 10002, 2, "Evaluacin social", TO_DATE('19/09/2014',
'dd/mm/yyyy'));
insert into Fase values(1111118, 10002, 4, "Entrevista final", TO_DATE('21/09/2014', 'dd/mm/yyyy'));
insert into Fase values(1111119, 10003, 1, "Toma de fotos 1", TO_DATE('12/04/2015',
'dd/mm/yyyy'));
insert into Fase values(1111120, 10003, 2, "Toma de fotos 2", TO_DATE('13/04/2015',
'dd/mm/yyyy'));
insert into Fase values(1111121, 10003, 3, "Entrevista final", TO_DATE('15/04/2015', 'dd/mm/yyyy'));
insert into Fase values(1111122, 10004, 1, "Prueba de modelaje", TO_DATE('18/06/2015',
'dd/mm/yyyy'));
insert into Fase values(1111123, 10004, 2, "Entrevista final", TO_DATE('19/06/2015', 'dd/mm/yyyy'));
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into

Sala
Sala
Sala
Sala
Sala
Sala

values(101,
values(102,
values(103,
values(104,
values(105,
values(106,

"Sala1",
"Sala2",
"Sala3",
"Sala4",
"Sala5",
"Sala6",

null,
null,
null,
null,
null,
null,

null);
null);
null);
null);
null);
null);

insert into Sala values(107, "Sala7", null, null);


insert into Sala values(108, "Sala8", null, null);
insert into Sala values(109, "Sala9", null, null);
insert into Sala values(110, "SUM-1", null, null);
insert into Sala values(111, "SUM-2", null, null);
insert into Sala values(112, "SUM-3", null, null);
insert into Sala values(113, "Sala10", null, null);
-- Se consideraron nulos estos datos porque no son necesarios por el momento
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
insert into Candidato
-- Esta vez se omiten
insert
insert
insert
insert

into
into
into
into

Pruebas
Pruebas
Pruebas
Pruebas

values(1000001, "Carla Aranda", null, 999348788, 1);


values(1000002, "Julia Mendez", null, 987678998, 2);
values(1000003, "Anita Mendoza", null, 856878990, 1);
values(1000004, "Elvira Solano", null, 987876889, 2);
values(1000005, "Juana Garca", null, 987987422, 3);
values(1000006, "Lisa Campos", null, 976422465, 2);
values(1000007, "Lorena Mendoza", null, 995678876, 1);
values(1000008, "Sonia Quispe", null, 998973435, 5);
values(1000009, "Yesenia Flores", null, 293487743, 1);
values(1000010, "Luisa Ojeda", null, 999127361, 2);
values(1000011, "Leslie Inga", null, 912387635, 1);
values(1000012, "Camila Pezo", null, 991277188, 2);
values(1000013, "Anais Vargas", null, 988761899, 2);
values(1000014, "Sol Nio", null, 999719989, 1);
values(1000015, "Stephany Diaz", null, 999987987, 1);
values(1000016, "Carla Mendez", null, 922376432, 1);
values(1000017, "Paola Carvo", null, 921176532, 5);
values(1000018, "Andrea Vergara", null, 998834762, 4);
values(1000019, "Daniela Duque", null, 982387332, 1);
values(1000020, "Carla Llosa", null, 923561567, 1);
values(1000021, "Lorena Vargas", null, 982734783, 5;
values(1000022, "Luisa Arias", null, 992348722, 5);
values(1000023, "Alondra Bustamante", null, 923874102, 1);
values(1000024, "Stephany Diaz", null, 914734034, 1);
values(1000025, "Juana Garcia", null, 993847003, 3);
values(1000026, "Elvira Solano", null, 934577632, 2);
values(1000027, "Isabel Montagne", null, 999342870, 1);
values(1000028, "Paola Ruiz", null, 923487202, 2);
values(1000029, "Leslie Paredes", null, 993485744, 3);
values(1000030, "Maria Jaules", null, 998546320, 3);
values(1000031, "Antonieta Mauro", null, 967246377, 3);
values(1000032, "Carla Aranda", null, 987346363, 2);
values(1000033, "Reina Orosco", null, 966348233, 2);
values(1000034, "Dalia Paredes", null, 934957100, 5);
values(1000035, "Jimena Pea", null, 923465322, 1);
values(1000036, "Angie Necochea", null, 934576340, 1);
values(1000037, "Valeria Bohorquez", null, 934500538, 4);
values(1000038, "Valeria Puez", null, 934500539, 4);
values(1000039, "Dalia Paredes", null, 934957100, 5);
values(1000040, "Julia Ojeda", null, 934345544, 1);
values(1000041, "Julieta Mauro", null, 934857433, 1);
values(1000042, "Britany Solis", null, 987457464, 1);
values(1000043, "Carla Plaza", null, 999345677, 2);
values(1000044, "Sol Rentera", null, 931176400, 2);
values(1000045, "Ivana Ivaez", null, 997467777, 1);
values(1000046, "Luisa Sandoval", null, 999234773, 3);
values(1000047, "Andrea Solano", null, 968630732, 2);
values(1000048, "Angie Navarra", null, 945439004, 2);
values(1000049, "Flor Flores", null, 998456100, 1);
values(1000050, "Maria Garivay", null, 999347822, 1);
los mails porque no sern necesarios para los test del presente trabajo

values(1111111,
values(1111111,
values(1111111,
values(1111111,

1000001,
1000002,
1000003,
1000004,

1,
2,
3,
4,

null,
null,
null,
null,

null,
null,
null,
null,

null,
null,
null,
null,

110,
110,
110,
110,

"no apto");
"apto");
"apto");
"apto");

insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into

Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas

values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111111,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111112,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111113,
values(1111114,
values(1111114,
values(1111114,
values(1111114,
values(1111114,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111115,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111116,
values(1111117,
values(1111117,
values(1111117,
values(1111117,
values(1111117,
values(1111117,
values(1111118,
values(1111118,
values(1111118,
values(1111118,
values(1111119,
values(1111119,

1000005,
1000006,
1000007,
1000008,
1000009,
1000010,
1000011,
1000012,
1000013,
1000014,
1000015,
1000002,
1000003,
1000004,
1000006,
1000007,
1000008,
1000009,
1000010,
1000011,
1000013,
1000015,
1000002,
1000003,
1000006,
1000008,
1000009,
1000010,
1000013,
1000015,
1000002,
1000003,
1000008,
1000009,
1000015,
1000016,
1000017,
1000018,
1000019,
1000020,
1000021,
1000022,
1000023,
1000024,
1000025,
1000016,
1000017,
1000018,
1000020,
1000021,
1000022,
1000023,
1000024,
1000017,
1000018,
1000020,
1000022,
1000023,
1000024,
1000017,
1000018,
1000020,
1000024,
1000026,
1000027,

5, null, null, null, 110, "no apto");


6, null, null, null, 110, "apto");
7, null, null, null, 110, "apto");
8, null, null, null, 113, "apto");
9, null, null, null, 113, "apto");
10, null, null, null, 113, "apto");
11, null, null, null, 113, "apto");
12, null, null, null, 113, "no apto");
13, null, null, null, 113, "apto");
14, null, null, null, 113, "no apto");
15, null, null, null, 113, "apto");
1, null, null, null, 110, "apto");
2, null, null, null, 110, "apto");
3, null, null, null, 110, "no apto");
4, null, null, null, 110, "apto");
5, null, null, null, 107, "no apto");
6, null, null, null, 107, "apto");
7, null, null, null, 107, "apto");
8, null, null, null, 107, "apto");
9, null, null, null, 107, "no apto");
10, null, null, null, 107, "apto");
11, null, null, null, 107, "apto");
1, null, null, null, 110, "apto");
2, null, null, null, 110, "apto");
3, null, null, null, 110, "no apto");
4, null, null, null, 110, "apto");
5, null, null, null, 110, "apto");
6, null, null, null, 110, "no apto");
7, null, null, null, 110, "no apto");
8, null, null, null, 110, "apto");
1, null, null, null, 101, "no apto");
2, null, null, null, 101, "apto");
3, null, null, null, 101, "apto");
4, null, null, null, 101, "apto");
5, null, null, null, 101, "no apto");
1, null, null, null, 110, "apto");
2, null, null, null, 110, "apto");
3, null, null, null, 110, "apto");
4, null, null, null, 110, "no apto");
5, null, null, null, 110, "apto");
6, null, null, null, 110, "apto");
7, null, null, null, 110, "apto");
8, null, null, null, 110, "apto");
9, null, null, null, 110, "apto");
10, null, null, null, 110, "no apto");
1, null, null, null, 108, "no apto");
2, null, null, null, 108, "apto");
3, null, null, null, 108, "apto");
4, null, null, null, 108, "apto");
5, null, null, null, 108, "no apto");
6, null, null, null, 108, "apto");
7, null, null, null, 108, "apto");
8, null, null, null, 108, "apto");
1, null, null, null, 110, "apto");
2, null, null, null, 110, "apto");
3, null, null, null, 110, "apto");
4, null, null, null, 110, "no apto");
5, null, null, null, 110, "no apto");
6, null, null, null, 110, "apto");
1, null, null, null, 112, "apto");
2, null, null, null, 112, "no apto");
3, null, null, null, 112, "apto");
4, null, null, null, 112, "apto");
1, null, null, null, 110, "apto");
2, null, null, null, 110, "no apto");

insert into Pruebas values(1111119, 1000028, 3, null, null, null, 110, "no apto");
insert into Pruebas values(1111119, 1000029, 4, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000030, 5, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000031, 6, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000032, 7, null, null, null, 110, "no apto");
insert into Pruebas values(1111119, 1000033, 8, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000034, 9, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000035, 10, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000036, 11, null, null, null, 110, "apto");
insert into Pruebas values(1111119, 1000037, 12, null, null, null, 110, "apto");
insert into Pruebas values(1111120, 1000026, 1, null, null, null, 111, "no apto");
insert into Pruebas values(1111120, 1000029, 2, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000030, 3, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000031, 4, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000033, 5, null, null, null, 111, "no apto");
insert into Pruebas values(1111120, 1000034, 6, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000035, 7, null, null, null, 111, "apto");
insert into Pruebas values(1111120, 1000036, 8, null, null, null, 111, "no apto");
insert into Pruebas values(1111120, 1000037, 9, null, null, null, 111, "apto");
insert into Pruebas values(1111121, 1000029, 1, null, null, null, 101, "no apto");
insert into Pruebas values(1111121, 1000030, 2, null, null, null, 101, "no apto");
insert into Pruebas values(1111121, 1000031, 3, null, null, null, 101, "apto");
insert into Pruebas values(1111121, 1000034, 4, null, null, null, 101, "apto");
insert into Pruebas values(1111121, 1000035, 5, null, null, null, 101, "no apto");
insert into Pruebas values(1111121, 1000037, 6, null, null, null, 101, "apto");
insert into Pruebas values(1111122, 1000038, 1, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000039, 2, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000040, 3, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000041, 4, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000042, 5, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000043, 6, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000044, 7, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000045, 8, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000046, 9, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000047, 10, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000048, 11, null, null, null, 110, "no apto");
insert into Pruebas values(1111122, 1000049, 12, null, null, null, 110, "apto");
insert into Pruebas values(1111122, 1000050, 13, null, null, null, 110, "apto");
insert into Pruebas values(1111123, 1000041, 1, null, null, null, 101, "no apto");
insert into Pruebas values(1111123, 1000042, 2, null, null, null, 101, "no apto");
insert into Pruebas values(1111123, 1000043, 3, null, null, null, 101, "apto");
insert into Pruebas values(1111123, 1000046, 4, null, null, null, 101, "apto");
insert into Pruebas values(1111123, 1000047, 5, null, null, null, 101, "no apto");
insert into Pruebas values(1111123, 1000049, 6, null, null, null, 101, "apto");
insert into Pruebas values(1111123, 1000050, 7, null, null, null, 101, "no apto");
-- Se consideraron nulas las fechas de realizacin y sus respectivas horas porque, por el momento,
basta con mencionar que estos campos forman parte de una restriccin UNIQUE y que por lo tanto,
no habr cruce de horarios.

3. Creacin de vistas:
/***********CREACION DE VISTAS***********/
CREATE VIEW castings_clientes AS
SELECT idCliente, NomCli, IdCasting,
FechaContratacion,
FechaInicio FROM Cliente NATURAL JOIN Castings;

NombreCasting,

CREATE VIEW candidatos_y_fases_castings AS


SELECT * FROM (
SELECT idcasting, nombrecasting, fechainicio FROM castings

) NATURAL JOIN (
SELECT idcasting, COUNT(DISTINCT idfase) AS fases,
COUNT(DISTINCT idcandidato) AS candidatos
FROM pruebas NATURAL JOIN fase GROUP BY idcasting)
ORDER BY IdCasting;
CREATE VIEW calificados_por_casting AS
SELECT idcasting, idfase, aprobados from (
SELECT idcasting, max(idfase) AS idfase from fase GROUP BY
idcasting
) NATURAL JOIN (
SELECT idfase, count(idcandidato) AS aprobados FROM pruebas
WHERE estadoprueba='apto' GROUP BY idfase)
ORDER BY idcasting;
CREATE VIEW agentes_camarografos AS
SELECT DISTINCT * FROM (
SELECT idcasting, idagente, nombreempleado AS nombreagente
FROM castings c, empleado e WHERE c.idagente = e.idempleado
) natural JOIN (
SELECT
idcasting,
idcamarografo,
nombreempleado
AS
nombrecamarografo
FROM
camarografo_casting
cc,
empleado
e
WHERE
cc.idcamarografo=e.idempleado)
ORDER BY idcasting;
CREATE VIEW cantidad_usos_salas AS
SELECT * FROM (
SELECT idsala, nombresala FROM sala
) NATURAL JOIN (
SELECT idsala, count(idcandidato) AS enpruebas, count(DISTINCT
idfase) AS enfases,
count(DISTINCT idcasting) AS encastings FROM sala natural JOIN (
SELECT idcasting, idfase, idcandidato, idsala FROM pruebas natural
JOIN fase)
GROUP BY idsala ORDER BY idsala);
CREATE VIEW detalles_castings AS
SELECT * FROM candidatos_y_fases_castings NATURAL JOIN
calificados_por_casting;

4. Creacin de Procedimientos y funciones:


CREATE PROCEDURE crear_fases
(i_idcasting IN NUMBER, i_numero_fases IN NUMBER)
DECLARE contador NUMBER:=1;
BEGIN
LOOP
INSERT INTO fase (idcasting, numsecuencia, Descripcion,
fechainicio)
VALUES (i_idcasting, contador, null, null);
contador = contador +1;
EXIT WHEN contador > i_numero_fases;

END LOOP;
END;

5. Creacin de Cursores:
--Cursor para visualizar los candidatos que aprobaron por lo menos 1
prueba
DECLARE
CURSOR c_aptos_primera IS
SELECT idcandidato, NombreCandidato FROM candidato NATURAL
JOIN(
SELECT idcandidato FROM pruebas WHERE idfase IN (
SELECT MIN(idfase) FROM fase group by idcasting)
AND estadoprueba='apto');
r_candidatos candidato%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Candidatos que aprobaron al menos una
prueba:');
OPEN c_aptos_primera
FETCH c_aptos_primera INTO r_candidatos;
DBMS_OUTPUT.PUT_LINE(r_candidatos.IdCandidato||' '||
r_candidatos);
END;
--Cursores que recorran las VISTAS
DECLARE
CURSOR c_castings_clientes IS
SELECT nombrecliente, COUNT(idcasting) AS numero_castings
FROM agentes_camarografos GROUP BY idCliente;
CURSOR c_cantidad_usos_salas IS SELECT * FROM
cantidad_usos_salas;
CURSOR c_detalles_castings IS SELECT * FROM detalles_castings;
r_1 castings_clientes%ROWTYPE;
r_3 cantidad_usos_salas%ROWTYPE;
r_4 c_detalles_castings%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Numero de castings contratados por cada
cliente:');
OPEN c_castings_clientes;
FETCH c_castings_clientes IN r_1;
DBMS_OUTPUT.PUT_LINE(r_1.nombrecliente||'
-->
'||
r_1.numero_castings);
CLOSE c_castings_clientes;

DBMS_OUTPUT.PUT_LINE('Cantidad de uso de cada sala para castings,


fases y pruebas');
OPEN c_cantidad_usos_salas;
FETCH c_cantidad_usos_salas IN r_3;
DBMS_OUTPUT.PUT_LINE(
r_3.NombreSala||' --> Castings: '||r_3.encastings||', Fases: '||
r_3.enfases||', Pruebas: '||r_3.enpruebas);
CLOSE c_cantidad_usos_salas;
DBMS_OUTPUT.PUT_LINE('Detalles de los castings: Numero de fases,
participantes y aprobados');
OPEN c_detalles_castings;
FETCH c_detalles_castings IN r_4;
DBMS_OUTPUT.PUT_LINE(
r_4.NombreCasting||' --> Fases: '||r_4.fases||', Candidatos: '||
r_4.candidatos||', Aprobados: '||r_4.aprobados);
CLOSE c_detalles_castings;
END;

6. Creacin de Triggers:
-- Triggers para agragacion de identificador automatico (similar a una
secuencia)
CREATE OR REPLACE TRIGGER new_id_casting
BEFORE INSERT ON castings FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idcasting) INTO new_id FROM castings;
:NEW.IdCasting:= new_id+1;
END;
CREATE OR REPLACE TRIGGER new_id_fase
BEFORE INSERT ON fase FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idfase) INTO new_id FROM fase;
:NEW.idfase:= new_id+1;
END;
CREATE OR REPLACE TRIGGER new_id_candidato
BEFORE INSERT ON candidato FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idcandidato) INTO new_id FROM candidato;
:NEW.idcandidato:= new_id+1;
END;
CREATE OR REPLACE TRIGGER new_id_cliente
BEFORE INSERT ON cliente FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idcliente) INTO new_id FROM cliente;
:NEW.idcliente:= new_id+1;
END;

CREATE OR REPLACE TRIGGER new_id_empleado


BEFORE INSERT ON empleado FOR EACH ROW
DECLARE new_id NUMBER;
BEGIN
SELECT MAX(idempleado) INTO new_id FROM empleado;
:NEW.idempleado:= new_id+1;
END;
/*Trigger para la agregacion automatica de un agente o camarografo a
las tablas respectivas*/
CREATE OR REPLACE TRIGGER new_camarografo_o_agente
AFTER INSERT ON empleado FOR EACH ROW
BEGIN
IF :NEW.cargo='Agente Casting' THEN
INSERT INTO agente VALUES(:NEW.idempleado);
ELSIF :NEW.cargo='Camarografo' THEN
INSERT INTO camarografo VALUES(:NEW.idempleado);
END IF;
END;
-- Trigger para actualizar la tabla Pruebas en caso se elimine un
candidato de Candidatos
CREATE OR REPLACE TRIGGER delete_candidato
BEFORE DELETE ON candidato FOR EACH ROW
BEGIN
UPDATE pruebas SET idcandidato=null
WHERE idcandidato=:OLD.idcandidato;
END;

S-ar putea să vă placă și