miércoles, 24 de junio de 2015

Análisis de requerimientos.

Para analizar los requerimientos primero debemos conocer cuáles son, así pues consideremos lo siguiente:

Requerimientos
Se necesita una aplicación que permita gestionar las apuestas de quinielas futbolísticas para un único apostante, es decir, para uno mismo. La aplicación deberá ser capaz de escrutar los pronósticos una vez se tiene el resultado de la jornada, e informar de cuantos aciertos se han logrado, no es necesario que gestione los gastos y premios ni apuestas múltiples (con dobles y/o triples). En general deberá permitir mantener los datos referentes a las jornadas de Liga y a las quinielas para explotar los datos referentes a los aciertos.

Análisis
Bien, dadas estas especificaciones debemos conocer esencialmente cómo funcionan las quinielas futbolísticas. En el mundo del fútbol podemos afirmar que se convocan jornadas en las que se organizan eventos, en estos eventos participan equipos, y sobre estos eventos se pronostican resultados a 1,X, 2. El conjunto de pronósticos sobre los eventos de una misma jornada es lo que se llama quiniela. Y el conjunto de resultados de los eventos de una misma jornada es lo que se llama combinación ganadora.

Entidades
Del análisis anterior proponemos las siguientes entidades:

  • EQUIPOS
  • JORNADAS
  • EVENTOS
  • QUINIELAS
  • PRONOSTICOS
Atributos de cada entidad
Este apartado se debería integrar en el modelo entidad-relación, en su lugar lo haremos aparte con la intención de no cargar el diagrama, de modo que el modelo presentado con anterioridad es un modelo simplificado. En la primera columna de la siguiente propuesta de atributos se especifica el nombre del atributo, en la segunda el tipo de dato, en la tercera si puede ser o no nulo, y en la cuarta columna, si se tercia, si es clave primaria, foránea, o los posibles valores si es un campo codificado.

EQUIPOS:
Código:

ID_EQUIPO     numérico      no nulo     clave primaria
EQUIPO        cadena(30)    no nulo


JORNADAS:
Código:

ID_JORNADA    numérico      no nulo     clave primaria
NOMBRE        cadena(30)    no nulo
FECHA         fecha         no nulo
DISPUTADA     cadena(1)     no nulo     posibles valores: ('S' , 'N') S -> sí , N -> No


EVENTOS:
Código:

ID_JORNADA    numérico      no nulo     clave primaria
ID_EVENTO     numérico      no nulo     clave primaria
LOCAL         numérico      no nulo     clave foránea de la entidad EQUIPOS
VISITANTE     numérico      no nulo     clave foránea de la entidad EQUIPOS
RESULTADO     cadena(1)     nulo        posibles valores: ('1' , 'X' , '2')
 


QUINIELAS:
Código:

ID_QUINIELA   numérico      no nulo     clave primaria
NOMBRE        cadena(30)    nulo
ESCRUTADA     cadena(1)     no nulo     posibles valores: ('S' , 'N') S -> sí , N -> No
ACIERTOS      numerico      nulo


PRONOSTICOS:
Código:

ID_QUINIELA   numérico      no nulo     clave primaria
ID_PRO        numérico      no nulo     clave primaria
ID_JORNADA    numérico      no nulo     clave foránea de la entidad EVENTOS junto con ID_EVENTO
ID_EVENTO     numérico      no nulo     clave foránea de la entidad EVENTOS junto con ID_JORNADA
PRONOSTICO    cadena(1)     no nulo     posibles valores: ('1' , 'X' , '2')
 

Claves foráneas de EVENTOS
Código:
alter table EVENTOS
  add constraint EVENTOS_ID_JORNADA_FK   foreign key (ID_JORNADA) references JORNADAS (ID_JORNADA),
  add constraint EVENTOS_ID_LOCAL_FK     foreign key (LOCAL)      references EQUIPOS  (ID_EQUIPO),
  add constraint EVENTOS_ID_VISITANTE_FK foreign key (VISITANTE)  references EQUIPOS  (ID_EQUIPO); 


Clave foránea de QUINIELAS
Código:
alter table QUINIELAS 
  add constraint QUINIELAS_ID_JORNADA_FK foreign key (ID_JORNADA) references JORNADAS (ID_JORNADA); 


Clave foránea de PRONOSTICOS
Código:
alter table PRONOSTICOS
  add constraint PRONOSTICOS_ID_QUINIELA_FK    
      foreign key (ID_QUINIELA)          references QUINIELAS (ID_QUINIELA),
  add constraint PRONOSTICOS_ID_JOR_ID_EVEN_FK 
      foreign key (ID_JORNADA,ID_EVENTO) references EVENTOS (ID_JORNADA,ID_EVENTO); 


Inserción de registros en las tablas
Para alimentar la BD lo habitual es disponer de alguna pantalla, o interface de usuario, donde mediante un formulario permita realizar las inserciones. Como esto queda fuera del alcance de este curso los registros se han creado directamente con instrucciones de inserción directamente sobre la BD, aunque lo habitual hubiese sido que un usuario insertara los datos desde los formularios de entrada de datos y mantenimiento de la aplicación.

Para simplificar vamos a suponer que en la competetición participan solo seis equipos y, por tanto, se celebrarán diez jornadas de Liga, cinco la primera vuelta y cinco más la segunda, con un total de tres eventos por jornada. Supondremos también que la competición se encuentra en momento tal que la jornada 8 todavía no se ha disputado, es decir, se han disputado ya 7 jornadas, por lo que en los registros de las tabla JORNADAS referentes a las jornadas 8, 9 y 10 el campo DISPUTADA contendrá una "N" y los registros de la tabla eventos referentes a las mismas jornadas el campo RESULTADO estará a nulo.

Inserts
Las inserciones que dejan la BD en esta situación son las siguientes:

Inserciones en la tabla EQUIPOS
Código:
insert into EQUIPOS (ID_EQUIPO, EQUIPO) values (1, 'Las Palmas');
insert into EQUIPOS (ID_EQUIPO, EQUIPO) values (2, 'Xerez');
insert into EQUIPOS (ID_EQUIPO, EQUIPO) values (3, 'Getafe');
insert into EQUIPOS (ID_EQUIPO, EQUIPO) values (4, 'Nastic');
insert into EQUIPOS (ID_EQUIPO, EQUIPO) values (5, 'Celta');
insert into EQUIPOS (ID_EQUIPO, EQUIPO) values (6, 'Alcorcón'); 


Inserciones en la tabla JORNADAS
Código:
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (1, 'Jornada 1', '2010-01-10', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (2, 'Jornada 2', '2010-01-17', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (3, 'Jornada 3', '2010-01-24', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (4, 'Jornada 4', '2010-02-07', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (5, 'Jornada 5', '2010-02-14', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (6, 'Jornada 6', '2010-02-21', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (7, 'Jornada 7', '2010-03-07', 'S');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (8, 'Jornada 8', '2010-03-21', 'N');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (9, 'Jornada 9', '2010-04-04', 'N');
insert into JORNADAS (ID_JORNADA, NOMBRE, FECHA, DISPUTADA) values (10, 'Jornada 10', '2010-04-18', 'N');
 


Inserciones en la tabla EVENTOS
Código:
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (1, 1, 5, 1, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (1, 2, 2, 3, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (1, 3, 4, 6, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (2, 1, 1, 2, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (2, 2, 3, 4, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (2, 3, 6, 5, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (3, 1, 1, 4, 'X');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (3, 2, 3, 5, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (3, 3, 6, 2, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (4, 1, 3, 6, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (4, 2, 2, 4, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (4, 3, 1, 5, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (5, 1, 1, 3, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (5, 2, 5, 2, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (5, 3, 6, 4, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (6, 1, 2, 1, 'X');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (6, 2, 4, 3, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (6, 3, 5, 6, '2');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (7, 1, 3, 2, 'X');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (7, 2, 4, 5, '1');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (7, 3, 6, 1, 'X');
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (8, 1, 3, 1, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (8, 2, 2, 6, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (8, 3, 5, 4, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (9, 1, 1, 6, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (9, 2, 5, 3, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (9, 3, 4, 2, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (10, 1, 6, 3, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (10, 2, 4, 1, NULL);
insert into EVENTOS (ID_JORNADA, ID_EVENTO, LOCAL, VISITANTE, RESULTADO) values (10, 3, 2, 5, NULL);
 


Inserciones en la tabla QUINIELAS
Código:

insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (1, 1, 'Quini 1.1', 'S', 0);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (2, 1, 'Quini 1.2', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (3, 1, 'Quini 1.3', 'S', 0);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (4, 2, 'Quini 2.1', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (5, 2, 'Quini 2.2', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (6, 3, 'Quini 3.1', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (7, 3, 'Quini 3.2', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (8, 3, 'Quini 3.3', 'S', 3);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (9, 3, 'Quini 3.4', 'S', 2);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (10, 4, 'Quini 4.1', 'S', 2);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (11, 4, 'Quini 4.2', 'S', 0);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (12, 4, 'Quini 4.3', 'S', 0);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (13, 5, 'Quini 5.1', 'S', 2);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (14, 5, 'Quini 5.2', 'S', 2);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (15, 6, 'Quini 6.1', 'S', 0);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (16, 6, 'Quini 6.2', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (17, 6, 'Quini 6.3', 'S', 0);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (18, 7, 'Quini 7.1', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (19, 7, 'Quini 7.2', 'S', 1);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (20, 8, 'Quini 8.1', 'N', NULL);
insert into QUINIELAS (ID_QUINIELA, ID_JORNADA, NOMBRE, ESCRUTADA, ACIERTOS) values (21, 8, 'Quini 8.2', 'N', NULL);


Inserciones en la tabla PRONOSTICOS
Código:
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (1, 1, 1, 1, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (1, 2, 1, 2, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (1, 3, 1, 3, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (2, 1, 1, 1, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (2, 2, 1, 2, '1');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (2, 3, 1, 3, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (3, 1, 1, 1, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (3, 2, 1, 2, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (3, 3, 1, 3, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (4, 1, 2, 1, '1');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (4, 2, 2, 2, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (4, 3, 2, 3, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (5, 1, 2, 1, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (5, 2, 2, 2, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (5, 3, 2, 3, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (6, 1, 3, 1, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (6, 2, 3, 2, '1');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (6, 3, 3, 3, 'X');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (7, 1, 3, 1, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (7, 2, 3, 2, '2');
insert into PRONOSTICOS (ID_QUINIELA, ID_PRO, ID_JORNADA, ID_EVENTO, PRONOSTICO) values (7, 3, 3, 3, '2');