Está en la página 1de 9

ENTREGA FINAL

PROYECTO - FUTBOL

BASES DE DATOS

PRESENTADO POR:

LAURA DANIELA GUTIERREZ BEDOYA

JHORMAN REY MENDEZ

EDICSON ARMANDO HURTADO LOZANO

INGENIERÍA DE SOFTWARE

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

SEDE BOGOTÁ

DICIEMBRE 2018
Proceso:

1. Modelo conceptual:
Se rediseñó todo el modelo conceptual, para encajar con las necesidades básicas de la
base de datos, intentando explorar la forma óptima de almacenar la información. El
resultado es el siguiente:
En este caso ya se aplican las correcciones de cardinalidad y relaciones sugeridas, además
de eliminar las tablas innecesarias.

2. Modelo lógico:
Basado en el modelo conceptual, era necesario remodelar y replantear los atributos
pertinentes al modelo lógico, por lo tanto, este también fue modificado casi en su
totalidad, siguiendo los consejos y observaciones dadas en la primera entrega. El resultado
es el siguiente:

Como se puede apreciar en la imagen, ya están definidos los atributos, llaves foráneas y
claves primarias a necesitar para el siguiente paso.

3. Modelo físico:
Continuando con el orden lógico a seguir, el modelo físico se creó basado en el modelo
lógico, asignando los tipos de datos, nombre de las tablas, etc. Nuevamente se tuvieron en
cuenta las observaciones dadas por el docente a la hora de crear dicho modelo. El
resultado es el siguiente:

La imagen se encuentra dentro del archivo comprimido, para una mejor visualización.

4. Normalización del modelo


Dado que el modelo conceptual fue planteado basado en las observaciones del docente y
el modelo anterior, dicho modelo fue creado de tal forma que ya estuviera normalizado a
su tercera forma normal, por lo tanto, no hay relaciones de muchos a muchos sin sus
tablas intermedias y cada tabla es fácilmente idexable debido a sus claves primarias cuyo
atributo es único para cada fila.

5. Creación del modelo físico con tablas, relaciones, llaves primarias y llaves foráneas.
El código SQL está escrito para MySQL, sin embargo, debería servir para cualquier motor
de base de datos relacional. El código está presente en un archivo por aparte, llamado
“ModeloFisico” para un mejor estudio, sin embargo, este es el código:

CREATE TABLE T_POSICION(


PS_ID INTEGER NOT NULL AUTO_INCREMENT,
PS_Descripcion VARCHAR(255) NOT NULL,
PRIMARY KEY (PS_ID)
);
CREATE TABLE T_CONTINENTE(
CE_ID INTEGER NOT NULL AUTO_INCREMENT,
CE_Nombre VARCHAR(255) NOT NULL,
PRIMARY KEY(CE_ID)
);
CREATE TABLE T_EQUIPO(
EQ_ID INTEGER NOT NULL AUTO_INCREMENT,
EQ_Pais VARCHAR(255) NOT NULL,
EQ_Puntos INTEGER NOT NULL DEFAULT 0,
EQ_Grupo CHAR(1) NOT NULL DEFAULT 'A',
EQ_Num_partidos INTEGER DEFAULT 0,
EQ_Num_victorias INTEGER DEFAULT 0,
EQ_Num_derrotas INTEGER DEFAULT 0,
EQ_Num_empates INTEGER DEFAULT 0,
EQ_Puesto_grupo TINYINT NOT NULL DEFAULT 1,
EQ_Goles_aFavor INTEGER DEFAULT 0,
EQ_Goles_enContra INTEGER DEFAULT 0,
EQ_Estado CHAR(1) NOT NULL DEFAULT 'A',
CE_ID INTEGER NOT NULL,
PRIMARY KEY (EQ_ID),
FOREIGN KEY (CE_ID) REFERENCES T_CONTINENTE(CE_ID),
UNIQUE (EQ_Pais)
);
CREATE TABLE T_JUGADOR(
JU_ID INTEGER NOT NULL AUTO_INCREMENT,
EQ_ID INTEGER NOT NULL,
JU_Nombre VARCHAR(255) NOT NULL,
JU_Edad TINYINT NOT NULL DEFAULT 25,
JU_Nacionalidad VARCHAR(255) DEFAULT 'N/A',
JU_Numero_uniforme TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (JU_ID),
FOREIGN KEY (EQ_ID) REFERENCES T_EQUIPO(EQ_ID)
);
CREATE TABLE T_PARTIDO(
PA_ID INTEGER NOT NULL AUTO_INCREMENT,
EQ_ID_1 INTEGER NOT NULL,
EQ_ID_2 INTEGER NOT NULL,
PA_Fecha DATE NOT NULL,
PA_Resultado INTEGER,
PA_Puntaje CHAR(5) NOT NULL DEFAULT '0-0',
PA_Estadio VARCHAR(255) NOT NULL,
PRIMARY KEY (PA_ID),
FOREIGN KEY (EQ_ID_1) REFERENCES T_EQUIPO(EQ_ID),
FOREIGN KEY (EQ_ID_2) REFERENCES T_EQUIPO(EQ_ID)
);
CREATE TABLE T_LESION(
LN_ID INTEGER NOT NULL AUTO_INCREMENT,
JU_ID INTEGER NOT NULL,
PA_ID INTEGER NOT NULL,
LN_Descripcion VARCHAR(255) NOT NULL DEFAULT 'Sin descripcion',
LN_Fecha DATE NOT NULL,
LN_Jugador_baja TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (LN_ID),
FOREIGN KEY (JU_ID) REFERENCES T_JUGADOR(JU_ID),
FOREIGN KEY (PA_ID) REFERENCES T_PARTIDO(PA_ID)
);
CREATE TABLE T_TARJETA(
TA_ID INTEGER NOT NULL AUTO_INCREMENT,
JU_ID INTEGER NOT NULL,
PA_ID INTEGER NOT NULL,
TA_Descripcion VARCHAR(255) NOT NULL DEFAULT 'Sin descripcion',
TA_Hora DATETIME NOT NULL,
TA_Tipo CHAR(1) NOT NULL DEFAULT 'A',
PRIMARY KEY (TA_ID),
FOREIGN KEY (JU_ID) REFERENCES T_JUGADOR(JU_ID),
FOREIGN KEY (PA_ID) REFERENCES T_PARTIDO(PA_ID)
);
CREATE TABLE T_JUGADOR_PARTIDO(
JU_ID INTEGER NOT NULL,
PA_ID INTEGER NOT NULL,
EQ_ID INTEGER NOT NULL,
PS_ID INTEGER NOT NULL,
JU_cambio_hora DATETIME,
JU_entrada_campo_hora DATETIME,
JU_suplente TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (JU_ID, PA_ID),
FOREIGN KEY (JU_ID) REFERENCES T_JUGADOR(JU_ID),
FOREIGN KEY (PA_ID) REFERENCES T_PARTIDO(PA_ID),
FOREIGN KEY (EQ_ID) REFERENCES T_EQUIPO(EQ_ID),
FOREIGN KEY (PS_ID) REFERENCES T_POSICION(PS_ID)
);
CREATE TABLE T_GOL(
GL_ID INTEGER NOT NULL AUTO_INCREMENT,
PA_ID INTEGER NOT NULL,
JU_ID INTEGER NOT NULL,
GL_Hora DATETIME NOT NULL,
GL_Tipo CHAR(1) NOT NULL DEFAULT 'N',
GL_Tiempo CHAR(1) NOT NULL DEFAULT 'P',
PRIMARY KEY (GL_ID),
FOREIGN KEY (PA_ID) REFERENCES T_PARTIDO(PA_ID),
FOREIGN KEY (JU_ID) REFERENCES T_JUGADOR(JU_ID)
);

6. Diseño de un conjunto de datos de prueba y cargue de los mismos realizando las


operaciones Insert, Update, Delete y Select.
Se creó un script sql para cada una de las operaciones, donde cada una de las querys es
diferente y tiene un propósito demostrativo, no son muchos los datos presentes, sin
embargo, son suficientes para la correcta ejecución línea a línea de los scrips.
Se sugiere primero aplicar el insert, luego el update, luego el select y finalmente el delete.

7. Elaborar el código SQL para cada uno de los incisos del punto 6.
Código para el insert:
INSERT INTO `t_posicion` (`PS_ID`, `PS_Descripcion`) VALUES
(1, 'Arquero'),
(2, 'Defensa'),
(3, 'Volante'),
(4, 'Delantero');
ALTER TABLE `t_posicion`
MODIFY `PS_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

INSERT INTO `t_continente` (`CE_ID`, `CE_Nombre`) VALUES


(1, 'America'),
(2, 'Europa'),
(3, 'Africa'),
(4, 'Oceania'),
(5, 'Asia');
ALTER TABLE `t_continente`
MODIFY `CE_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

INSERT INTO `t_equipo` (`EQ_ID`, `EQ_Pais`, `EQ_Puntos`, `EQ_Grupo`,


`EQ_Num_partidos`, `EQ_Num_victorias`, `EQ_Num_derrotas`, `EQ_Num_empates`,
`EQ_Puesto_grupo`, `EQ_Goles_aFavor`, `EQ_Goles_enContra`, `EQ_Estado`, `CE_ID`)
VALUES
(1, 'Colombia', 0, 'A', 0, 0, 0, 0, 1, 0, 0, 'A', 1),
(2, 'Argentina', 0, 'A', 0, 0, 0, 0, 1, 0, 0, 'A', 1),
(3, 'Brasil', 0, 'A', 0, 0, 0, 0, 1, 0, 0, 'A', 1),
(4, 'Uruguay', 0, 'A', 0, 0, 0, 0, 1, 0, 0, 'A', 1);
ALTER TABLE `t_equipo`
MODIFY `EQ_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

INSERT INTO `t_jugador` (`JU_ID`, `EQ_ID`, `JU_Nombre`, `JU_Edad`, `JU_Nacionalidad`,


`JU_Numero_uniforme`) VALUES
(1, 1, 'Radamel Falcao', 32, 'Colombia', 9),
(2, 1, 'James Rodriguez', 27, 'Colombia', 10),
(3, 2, 'Lionel Messi', 31, 'Argentina', 10),
(4, 2, 'Paulo Dybala', 25, 'Argentina', 21),
(5, 3, 'Neymar da Silva', 26, 'Brasil', 10),
(6, 3, 'Marcelo Vieira', 30, 'N/A', 9),
(7, 4, 'Luis Suarez', 31, 'Uruguay', 9),
(8, 4, 'Edinson Cavani', 31, 'Uruguay', 21);
ALTER TABLE `t_jugador`
MODIFY `JU_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
INSERT INTO `t_partido` (`PA_ID`, `EQ_ID_1`, `EQ_ID_2`, `PA_Fecha`, `PA_Resultado`,
`PA_Puntaje`, `PA_Estadio`) VALUES
(1, 2, 1, '2018-12-10', NULL, '0-0', 'El Campin'),
(2, 3, 4, '2018-12-10', NULL, '0-0', 'Maracana');
ALTER TABLE `t_partido`
MODIFY `PA_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

INSERT INTO `t_jugador_partido` (`JU_ID`, `PA_ID`, `EQ_ID`, `PS_ID`) VALUES


(1, 1, 1, 4),
(2, 1, 1, 4),
(3, 1, 2, 4),
(4, 1, 2, 3),
(5, 2, 3, 4),
(6, 2, 3, 4),
(7, 2, 4, 4),
(8, 2, 4, 3);

INSERT INTO `t_gol` (`GL_ID`, `PA_ID`, `JU_ID`, `GL_Hora`, `GL_Tipo`, `GL_Tiempo`) VALUES
(1, 1, 1, '2018-12-10 15:16:24', 'N', 'P');
ALTER TABLE `t_gol`
MODIFY `GL_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

INSERT INTO `t_tarjeta` (`TA_ID`, `JU_ID`, `PA_ID`, `TA_Descripcion`, `TA_Hora`, `TA_Tipo`)


VALUES
(1, 2, 1, 'Empujon', '2018-12-10 15:29:17', 'A');
ALTER TABLE `t_tarjeta`
MODIFY `TA_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

INSERT INTO `t_lesion` (`LN_ID`, `JU_ID`, `PA_ID`, `LN_Descripcion`, `LN_Fecha`,


`LN_Jugador_baja`) VALUES
(1, 3, 1, 'Se golpeo la canilla levemente', '2018-12-10', 0);
ALTER TABLE `t_lesion`
MODIFY `LN_ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

Código para el update:

-- Updates para los resultados del primer partido, Colombia 1 Argentina 0


UPDATE t_partido SET PA_Resultado=t_partido.EQ_ID_1, PA_Puntaje='1-0' WHERE
PA_ID=1;
UPDATE t_equipo SET EQ_Num_partidos=EQ_Num_partidos+1,
EQ_Num_victorias=EQ_Num_victorias+1, EQ_Goles_aFavor=EQ_Goles_aFavor+1 WHERE
EQ_ID = 1;

UPDATE t_equipo SET EQ_Puntos=EQ_Puntos+3 WHERE EQ_ID = 1;

UPDATE t_equipo SET EQ_Num_partidos=EQ_Num_partidos+1,


EQ_Num_derrotas=EQ_Num_derrotas+1, EQ_Goles_enContra=EQ_Goles_enContra+1
WHERE EQ_ID = 2;

UPDATE t_equipo SET EQ_Puesto_grupo=3 WHERE EQ_ID = 2;

-- Updates para los resultados del segundo partido, empate 0-0 entre Brasil y Uruguay
UPDATE t_partido SET PA_Resultado=0 WHERE PA_ID=2;

UPDATE t_equipo SET EQ_Num_partidos=EQ_Num_partidos+1,


EQ_Num_empates=EQ_Num_empates+1 WHERE EQ_ID = 3;

UPDATE t_equipo SET EQ_Puesto_grupo=2, EQ_Puntos=EQ_Puntos+1 WHERE EQ_ID = 3;

UPDATE t_equipo SET EQ_Num_partidos=EQ_Num_partidos+1,


EQ_Num_empates=EQ_Num_empates+1 WHERE EQ_ID = 4;

UPDATE t_equipo SET EQ_Puesto_grupo=2, EQ_Puntos=EQ_Puntos+1 WHERE EQ_ID = 4;

-- Updates varios
UPDATE t_lesion SET LN_Descripcion='Se golpeo la canilla levemente y genero molestias'
WHERE LN_ID = 1;

UPDATE t_tarjeta SET TA_Descripcion='Empujon a Lionel Messi' WHERE TA_ID = 1;

Código para los selects:

-- Ver datos relevantes de los equipos


SELECT EQ_Pais AS Pais, EQ_Puntos as Puntos, EQ_Num_partidos as Partidos_jugados,
EQ_Num_victorias as Victorias,
EQ_Num_Derrotas as Derrotas, EQ_Num_empates, EQ_Grupo as Grupo FROM t_equipo;

-- Registro de goles hechos durante el partido


SELECT * FROM t_gol INNER JOIN t_partido ON t_gol.PA_ID=t_partido.PA_ID;

-- Registro de goles hechos por un equipo específico con ID variable


SELECT t_gol.*, t_partido.* FROM t_gol INNER JOIN t_partido ON
t_gol.PA_ID=t_partido.PA_ID INNER JOIN t_equipo ON t_partido.EQ_ID_1 =
t_equipo.EQ_ID;

-- Registro de goles hechos por un equipo específico con ID definido


SELECT t_gol.*, t_partido.* FROM t_gol INNER JOIN t_partido ON
t_gol.PA_ID=t_partido.PA_ID WHERE t_partido.EQ_ID_1=1;

-- Registro de tarjetas para todos los jugadores de un equipo específico


SELECT t_tarjeta.* FROM t_tarjeta INNER JOIN t_jugador ON
t_tarjeta.JU_ID=t_jugador.JU_ID WHERE t_jugador.EQ_ID = 1;

-- Registro de las lesiones para un partido específico


SELECT * FROM t_lesion WHERE PA_ID = 1;

También podría gustarte