Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ttulo:
Carrera:
rea Acadmica:
Software
Lnea de Investigacin:
Desarrollo de Software
Quinto Sistemas A
Alumnos participantes:
Mdulo y Docente:
II.
INFORME DEL PROYECTO
1.2.
PPYY
2.1 Ttulo
Campeonato Nacional de Futbol
2.2 Objetivos
General
Documentar los conceptos bsicos de Base de datos, estableciendo la automatizacin de los
procesos dentro de la Base Campeonato Nacional y establecer los controles necesarios para
el funcionamiento esperado.
Especficos
1. Documentar los conceptos bsicos de Base de Datos.
2. Establecer la automatizacin de los procesos dentro de la Base Campeonato Nacional.
2.3 Resumen
La base de datos relacionada con el Campeonato Nacional se manejara por tablas donde se
podr controlar a jugadores titulares, suplentes, jugadores amonestados o expulsados, tabla de
posiciones, goles que se irn aadiendo a cada equipo y a cada jugador para sacar goleadores.
La base campeonato nacional cumple con todas las reglas principales que se manejan en la vida
real con ello podemos obtener resultados correctos ya que cada tabla contiene informacin
importante que nos ayudara a realizar los procesos internos
2.4 Palabras clave: (Base, triggers, exception, function, if, end, begin, declare)
2.5 Introduccin
Materiales
Oracle
Metodologa
Triggers
Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la base
de datos. Su nombre se deriva por el comportamiento que presentan en su funcionamiento, ya
que se ejecutan cuando sucede algn evento sobre las tablas a las que se encuentra asociado.
Los eventos que hacen que se ejecute un trigger son las operaciones de insercin (INSERT),
borrado (DELETE) o actualizacin (UPDATE), ya que modifican los datos de una tabla. Los
trigger no soportan el commit.
Primero debemos crear la base de datos con todas las relaciones posibles
Por ultimo realizamos las inserciones de datos y comprobamos la funcionalidad de los triggers
Adems con el control de los jugadores no puedan entrar al ser cambiado o expulsados al
igual que el control de goles por los mismos detalles mencionados, siempre sern de gran
ayuda para tener un control y transparencia de cada cotejo disput en las diferentes fechas
y diferentes lugares, donde se realiza la copa con un control de asistencia para de esa manera
tambin tener un control ya sea de asistencia o de ganancia por cada partido, refirindose
al costo por entrada.
2.8 Conclusiones
1. El modelo entidad relacin es un paso fundamental en la implementacin de la base ya
que ayuda a tener en claro cmo se relacionan las tablas.
2. A travs de la implementacin de Triggers se puede controlar gran cantidad de
informacin
Oracle,
[En
lnea]. Available:
http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12cdownload1958347.html. [ltimo acceso: 16 08 2015].
[3] Netbeans,
Netbeans,
[En
lnea].
https://netbeans.org/kb/docs/ide/oracledb.html. [ltimo acceso: 16 08 2015].
2.10. Fotografas y grficos
Available:
Anexo
Creacin de la base Copa Amrica con los respectivos triggers
CREANDO TABLAS
------------------
);
CREATE TABLE PARTIDOS
(
NUM_PAR VARCHAR (3) PRIMARY KEY,
FEC_PAR DATE NOT NULL,
COD_EST_P VARCHAR(5) REFERENCES ESTADIOS(COD_EST),
EQUI_1 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
EQUI_2 VARCHAR(5) REFERENCES EQUIPOS(COD_EQU),
ARB_CEN VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ARB_L1 VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ARB_L2 VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ARB_SUP VARCHAR(5) REFERENCES ARBITROS(COD_ARB),
ASISTENCIA NUMBER(5) NOT NULL,
NUM_FEC_P NUMBER REFERENCES FECHAS (NUM_FEC),
FINAL VARCHAR(2)
);
CREATE TABLE JUGADORES
(
ID_JUG VARCHAR(5) PRIMARY KEY,
NOM_JUG VARCHAR(15) NOT NULL,
APE_JUG VARCHAR(15) NOT NULL,
NUM_CAM_JUG VARCHAR(2) NOT NULL,
POS_JUG VARCHAR(15) NOT NULL,
NAC_JUG VARCHAR(15) NOT NULL,
SALIO VARCHAR(8) CHECK(SALIO IN ('TITULAR','SUPLENTE','CAMBIO')),
NUM_TAR NUMBER,
EQUI_P VARCHAR(5) REFERENCES EQUIPOS(COD_EQU)
);
CREATE TABLE TITULARES
(
ID_JUG_T VARCHAR(5) REFERENCES JUGADORES (ID_JUG),
NUM_PAR_J VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR),
CONSTRAINT SUPERCLAVE PRIMARY KEY(ID_JUG_T, NUM_PAR_J)
);
CREATE TABLE SUPLENTES
(
ID_JUG_S VARCHAR(5) REFERENCES JUGADORES (ID_JUG),
NUM_PAR_S VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR),
CONSTRAINT SUPERCLAVE1 PRIMARY KEY(ID_JUG_S, NUM_PAR_S)
);
CREATE TABLE NOVEDADES
(
COD_NOV VARCHAR(5) PRIMARY KEY,
NOMBRE VARCHAR(25),
EQUI VARCHAR(20)
);
CREATE TABLE EXPULSADOS
(
ID_JUG_E VARCHAR(5) REFERENCES JUGADORES(ID_JUG),
NUM_PAR_E VARCHAR(3) REFERENCES PARTIDOS(NUM_PAR),
FEC NUMBER REFERENCES FECHAS(NUM_FEC)
);
TRIGGERS
***************************************************************************
****************
CREATE OR REPLACE TRIGGER CONT_CAMBIOS
AFTER INSERT ON SUSTITUCIONES
FOR EACH ROW
DECLARE
ERROR EXCEPTION; A NUMBER;
E JUGADORES.EQUI_P%TYPE;
B NUMBER;
BEGIN
SELECT EQUI_P INTO E
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_S;
INSERT INTO CAMBIOS(ID_JUG,NUM_PAR,EQUI)
VALUES(:NEW.ID_JUG_E,:NEW.NUM_PAR,E);
SELECT COUNT(C.NUM_PAR) INTO A
FROM CAMBIOS C, PARTIDOS P
WHERE C.NUM_PAR=P.NUM_PAR
AND C.EQUI=E;
IF A>3 THEN
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'SOLO PUEDE 3 CAMBIOS POR EQUIPO');
END;
.
/
***************************************************************************
*****************
CREATE OR REPLACE TRIGGER CONT_POSICIONES
AFTER INSERT ON GRUPOS
FOR EACH ROW
BEGIN
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,1,:NEW.EQUI_1,'0','0','0','0');
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,2,:NEW.EQUI_2,'0','0','0','0');
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,3,:NEW.EQUI_3,'0','0','0','0');
INSERT INTO POSICIONES
VALUES(:NEW.NOM_GRU,4,:NEW.EQUI_4,'0','0','0','0');
END;
.
/
***************************************************************************
*****************
CREATE OR REPLACE TRIGGER CONT_CAMBIO
BEFORE INSERT OR UPDATE ON SUSTITUCIONES
FOR EACH ROW
DECLARE
ERROR EXCEPTION;
JS JUGADORES.ID_JUG%TYPE;
ERROR1 EXCEPTION;
ERROR2 EXCEPTION;
SALIO JUGADORES.SALIO%TYPE;
BEGIN
SELECT ID_JUG,SALIO INTO JS,SALIO
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_S;
IF SALIO='SUPLENTE' OR SALIO='CAMBIO' THEN
RAISE ERROR;
END IF;
SELECT ID_JUG,SALIO INTO JS,SALIO
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_E;
IF SALIO='TITULAR' OR SALIO ='CAMBIO' THEN
RAISE ERROR1;
END IF;
IF :NEW.ID_JUG_S = :NEW.ID_JUG_E THEN
RAISE ERROR2;
END IF;
UPDATE JUGADORES
SET SALIO = 'CAMBIO'
WHERE ID_JUG=:NEW.ID_JUG_S;
UPDATE JUGADORES
SET SALIO = 'TITULAR'
WHERE ID_JUG=:NEW.ID_JUG_E;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20001,'ESE JUGADOR YA NO ESTA EN CANCHA');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'ESTE JUGADOR YA SALIO NO PUEDE
ENTRAR DE NUEVO');
WHEN ERROR2 THEN
UPDATE POSICIONES
SET PUN = 3+PUNTOS1
, GOL_FAVOR =MAR1+AN_GOL1
, GOL_CONTRA =MAR2+AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET PUN = 0+PUNTOS2
, GOL_FAVOR =MAR2+AN_GOL2
, GOL_CONTRA =MAR1+AN_CONTRA2
WHERE POS=NOM2;
END IF;
IF MAR2 > MAR1 THEN
UPDATE POSICIONES
SET PUN = 0+PUNTOS1
, GOL_FAVOR =MAR1+AN_GOL1
, GOL_CONTRA =MAR2+AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET PUN = 3+PUNTOS2
, GOL_FAVOR =MAR2+AN_GOL2
, GOL_CONTRA =MAR1+AN_CONTRA2
WHERE POS=NOM2;
END IF;
SELECT PUN,GOL_FAVOR,GOL_CONTRA,GOL_DIFERE INTO
PUNTOS1,AN_GOL1,AN_CONTRA1,AN_DIFERE1
FROM POSICIONES
WHERE POS=NOM1;
SELECT PUN,GOL_FAVOR,GOL_CONTRA,GOL_DIFERE INTO
PUNTOS2,AN_GOL2,AN_CONTRA2,AN_DIFERE2
FROM POSICIONES
WHERE POS=NOM2;
IF MAR1 = MAR2 THEN
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL1-AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL2-AN_CONTRA2
WHERE POS=NOM2;
END IF;
IF MAR1>MAR2 THEN
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL1-AN_CONTRA1
WHERE POS=NOM1;
UPDATE POSICIONES
SET GOL_DIFERE = AN_GOL2-AN_CONTRA2
WHERE POS=NOM2;
ELSE
UPDATE POSICIONES
IF (A>0) THEN
RAISE ERROR;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR (-20001,'EL MISMO EQUIPO NO PUEDE JUGAR 2
VECES EN UNA FECHA');
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_TIT_SUP
AFTER UPDATE ON PARTIDOS
FOR EACH ROW
BEGIN
UPDATE JUGADORES
SET SALIO=''
, NUM_TAR=0;
END;
.
/
***************************************************************************
************
CREATE OR REPLACE TRIGGER CONT_GOLEADOR
AFTER INSERT ON GOLES
FOR EACH ROW
DECLARE
A NUMBER;
E JUGADORES.EQUI_P%TYPE;
EQ EQUIPOS.NOM_EQU%TYPE;
D NUMBER;
NOM JUGADORES.NOM_JUG%TYPE;
ERROR EXCEPTION;
BEGIN
SELECT COUNT(ID_JUG_G) INTO A
FROM GOLEADOR
WHERE ID_JUG_G=:NEW.ID_JUG_GOL;
IF A>0 THEN
SELECT E.NOM_EQU INTO EQ
FROM EQUIPOS E,JUGADORES J
WHERE J.ID_JUG=:NEW.ID_JUG_GOL
AND J.EQUI_P = E.COD_EQU;
SELECT NOM_JUG INTO NOM
FROM JUGADORES
WHERE ID_JUG=:NEW.ID_JUG_GOL;
UPDATE GOLEADOR
SET EQUI=EQ
, NOMBRE=NOM
WHERE ID_JUG_G=:NEW.ID_JUG_GOL;
END IF;
IF E<>E1 THEN
RAISE ERROR;
END IF;
IF D=0 THEN
RAISE ERROR1;
END IF;
EXCEPTION
WHEN ERROR THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR NO PERTENECE A ESE
EQUIPO');
WHEN ERROR1 THEN
RAISE_APPLICATION_ERROR(-20002,'ESE JUGADOR NO PERTENECE A ESE
PARTIDO');
END;
.
/