Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions resoluciones/antonio-canux/ejercicio-06/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Ejercicio 06: Torneo Esports

**Camper:** Antonio Canux

## Descripcion del problema

El torneo necesita reemplazar el registro manual de equipos, jugadores, partidas y resultados por una base de datos relacional que evite duplicidad y permita generar reportes de desempeno por jugador y por partida.

## Tablas y relaciones

- `equipos`: catalogo de equipos participantes (nombre).
- `jugadores`: catalogo de jugadores por equipo (`equipos` 1—N `jugadores`).
- `partidas`: enfrentamiento entre dos equipos (`equipos` 1—N `partidas`, dos veces: local y visitante).
- `resultados`: desempeno de un jugador en una partida (`partidas` 1—N `resultados`, `jugadores` 1—N `resultados`).

## Restricciones aplicadas

- `PRIMARY KEY` autoincremental en las 4 tablas.
- `FOREIGN KEY`: `jugadores.id_equipo`, `partidas.equipo_local`, `partidas.equipo_visitante`, `resultados.id_partida`, `resultados.id_jugador`.
- `NOT NULL` en todos los campos obligatorios.
- `UNIQUE`: `equipos.nombre`, `jugadores.nickname`, `(id_partida, id_jugador)` en `resultados`.
- `CHECK`: `jugadores.rol IN (...)`, `partidas.equipo_local <> partidas.equipo_visitante`, `resultados.kills >= 0`, `resultados.muertes >= 0`, `resultados.puntos >= 0`.

## Como ejecutar

```bash
sqlite3 ejercicio-06.db < ddl/schema.sql
sqlite3 ejercicio-06.db < dml/inserts.sql
sqlite3 ejercicio-06.db < dml/operaciones.sql
sqlite3 ejercicio-06.db < dql/consultas.sql
```
37 changes: 37 additions & 0 deletions resoluciones/antonio-canux/ejercicio-06/ddl/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
PRAGMA foreign_keys = ON;

CREATE TABLE equipos (
id_equipo INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL UNIQUE
);

CREATE TABLE jugadores (
id_jugador INTEGER PRIMARY KEY AUTOINCREMENT,
id_equipo INTEGER NOT NULL,
nickname TEXT NOT NULL UNIQUE,
rol TEXT NOT NULL CHECK (rol IN ('duelist', 'support', 'entry', 'igl', 'sniper')),
FOREIGN KEY (id_equipo) REFERENCES equipos (id_equipo)
);

CREATE TABLE partidas (
id_partida INTEGER PRIMARY KEY AUTOINCREMENT,
equipo_local INTEGER NOT NULL,
equipo_visitante INTEGER NOT NULL,
fecha_partida TEXT NOT NULL,
mapa TEXT NOT NULL,
FOREIGN KEY (equipo_local) REFERENCES equipos (id_equipo),
FOREIGN KEY (equipo_visitante) REFERENCES equipos (id_equipo),
CHECK (equipo_local <> equipo_visitante)
);

CREATE TABLE resultados (
id_resultado INTEGER PRIMARY KEY AUTOINCREMENT,
id_partida INTEGER NOT NULL,
id_jugador INTEGER NOT NULL,
kills INTEGER NOT NULL CHECK (kills >= 0),
muertes INTEGER NOT NULL CHECK (muertes >= 0),
puntos INTEGER NOT NULL CHECK (puntos >= 0),
FOREIGN KEY (id_partida) REFERENCES partidas (id_partida),
FOREIGN KEY (id_jugador) REFERENCES jugadores (id_jugador),
UNIQUE (id_partida, id_jugador)
);
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions resoluciones/antonio-canux/ejercicio-06/dml/inserts.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
INSERT INTO equipos (nombre)
VALUES ('Dragones Rojos'),
('Lobos Nocturnos'),
('Fenix Gaming'),
('Tigres Blancos'),
('Halcones Negros');

INSERT INTO jugadores (id_equipo, nickname, rol)
VALUES (1, 'RedDragon', 'igl'),
(2, 'NightWolf', 'entry'),
(3, 'PhoenixX', 'sniper'),
(4, 'WhiteTiger', 'support'),
(5, 'BlackHawk', 'duelist');

INSERT INTO partidas (equipo_local, equipo_visitante, fecha_partida, mapa)
VALUES (1, 2, '2026-07-01 18:00', 'Dust'),
(3, 4, '2026-07-01 20:00', 'Mirage'),
(5, 1, '2026-07-02 18:00', 'Inferno'),
(2, 3, '2026-07-02 20:00', 'Nuke'),
(4, 5, '2026-07-03 18:00', 'Dust'),
(1, 3, '2026-07-03 20:00', 'Mirage');

INSERT INTO resultados (id_partida, id_jugador, kills, muertes, puntos)
VALUES (1, 1, 20, 12, 85),
(1, 2, 15, 18, 60),
(2, 3, 25, 10, 95),
(2, 4, 18, 15, 70),
(3, 5, 22, 14, 88),
(3, 1, 12, 20, 55),
(4, 2, 19, 16, 72),
(4, 3, 21, 13, 80),
(5, 4, 17, 17, 65),
(5, 5, 24, 11, 92);
26 changes: 26 additions & 0 deletions resoluciones/antonio-canux/ejercicio-06/dml/operaciones.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
INSERT INTO equipos (nombre) VALUES
('Aguilas Doradas');

INSERT INTO resultados (id_partida, id_jugador, kills, muertes, puntos) VALUES
(6, 1, 16, 15, 68);

UPDATE resultados
SET kills = 26, puntos = 98
WHERE id_resultado = 3;

UPDATE jugadores
SET rol = 'entry'
WHERE id_jugador = 4;

DELETE FROM resultados
WHERE id_resultado = 11;

DELETE FROM resultados
WHERE puntos < 60;

-- 2 operaciones que fallarám por restricciones
-- Falla por UNIQUE (equipos.nombre): el equipo ya existe
-- INSERT INTO equipos (nombre) VALUES ('Dragones Rojos');

-- Falla por CHECK (equipo_local <> equipo_visitante)
-- INSERT INTO partidas (equipo_local, equipo_visitante, fecha_partida, mapa) VALUES (1, 1, '2026-07-10 18:00', 'Dust');
30 changes: 30 additions & 0 deletions resoluciones/antonio-canux/ejercicio-06/dql/consultas.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
-- 1. Listar todos los registros principales de la entidad central
SELECT * FROM resultados;

-- 2. Mostrar solo dos columnas relevantes
SELECT kills, puntos FROM resultados;

-- 3. Filtrar registros por una condicion numerica
SELECT * FROM resultados WHERE kills >= 20;

-- 4. Ordenar resultados por puntos
SELECT * FROM resultados ORDER BY puntos DESC;

-- 5. Mostrar los 5 mejores resultados segun puntos
SELECT * FROM resultados ORDER BY puntos DESC LIMIT 5;

-- 6. Contar registros totales
SELECT COUNT(*) AS total_resultados FROM resultados;

-- 7. Promedio, minimo y maximo de puntos
SELECT
AVG(puntos) AS promedio,
MIN(puntos) AS minimo,
MAX(puntos) AS maximo
FROM resultados;

-- 8. Agrupar resultados por jugador
SELECT id_jugador, COUNT(*) AS partidas_jugadas, SUM(puntos) AS puntos_totales
FROM resultados
GROUP BY id_jugador;

Loading