-- ===== 0) Base de datos =====
CREATE DATABASE IF NOT EXISTS iasca
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE iasca;
-- ===== 1) Catálogos =====
CREATE TABLE categorias_competencia (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(20) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_categoria_nombre (nombre)
) ENGINE=InnoDB;
CREATE TABLE criterios (
id INT NOT NULL AUTO_INCREMENT,
seccion ENUM(
'PRESENTACION',
'EXTERIOR',
'MOTOR',
'INTERIOR',
'AUDIO_Y_SEGURIDAD',
'PUNTOS_EXTRAS'
) NOT NULL,
nombre VARCHAR(80) NOT NULL,
orden INT NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_criterio (seccion, nombre),
KEY idx_criterios_seccion_orden (seccion, orden)
) ENGINE=InnoDB;
-- ===== 2) Entidades =====
CREATE TABLE jueces (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(120) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
CREATE TABLE competidores (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(120) NOT NULL,
direccion VARCHAR(200) NULL,
team_club VARCHAR(120) NULL,
email VARCHAR(120) NULL,
firma_nombre VARCHAR(120) NULL,
identificacion VARCHAR(50) NULL, -- campo "ID" de la hoja
PRIMARY KEY (id),
KEY idx_competidores_nombre (nombre),
KEY idx_competidores_idext (identificacion)
) ENGINE=InnoDB;
CREATE TABLE vehiculos (
id INT NOT NULL AUTO_INCREMENT,
anio SMALLINT NULL,
marca VARCHAR(80) NULL,
modelo VARCHAR(80) NULL,
color VARCHAR(60) NULL,
version VARCHAR(60) NULL,
estado VARCHAR(60) NULL,
ciudad VARCHAR(80) NULL,
tel VARCHAR(40) NULL,
PRIMARY KEY (id),
KEY idx_vehiculos_marca_modelo (marca, modelo),
KEY idx_vehiculos_anio (anio)
) ENGINE=InnoDB;
-- ===== 3) Evento + Evaluación =====
CREATE TABLE eventos (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(120) NOT NULL,
fecha DATE NOT NULL,
PRIMARY KEY (id),
KEY idx_eventos_fecha (fecha)
) ENGINE=InnoDB;
CREATE TABLE evaluaciones (
id INT NOT NULL AUTO_INCREMENT,
evento_id INT NOT NULL,
juez_id INT NOT NULL,
competidor_id INT NOT NULL,
vehiculo_id INT NOT NULL,
categoria_id INT NOT NULL,
folio VARCHAR(50) NULL, -- campo "EVALUACION ____"
observaciones TEXT NULL,
total INT NULL, -- opcional (puedes calcularlo en consulta)
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_eval_evento (evento_id),
KEY idx_eval_juez (juez_id),
KEY idx_eval_competidor (competidor_id),
KEY idx_eval_vehiculo (vehiculo_id),
KEY idx_eval_categoria (categoria_id),
UNIQUE KEY uq_eval_folio_evento (evento_id, folio),
CONSTRAINT fk_eval_evento FOREIGN KEY (evento_id) REFERENCES eventos(id),
CONSTRAINT fk_eval_juez FOREIGN KEY (juez_id) REFERENCES jueces(id),
CONSTRAINT fk_eval_competidor FOREIGN KEY (competidor_id) REFERENCES competidores(id),
CONSTRAINT fk_eval_vehiculo FOREIGN KEY (vehiculo_id) REFERENCES vehiculos(id),
CONSTRAINT fk_eval_categoria FOREIGN KEY (categoria_id) REFERENCES categorias_competencia(id)
) ENGINE=InnoDB;
CREATE TABLE evaluacion_puntajes (
id BIGINT NOT NULL AUTO_INCREMENT,
evaluacion_id INT NOT NULL,
criterio_id INT NOT NULL,
puntaje TINYINT NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_eval_criterio (evaluacion_id, criterio_id),
KEY idx_ep_eval (evaluacion_id),
KEY idx_ep_criterio (criterio_id),
CONSTRAINT ck_puntaje_1_10 CHECK (puntaje BETWEEN 1 AND 10),
CONSTRAINT fk_ep_eval FOREIGN KEY (evaluacion_id) REFERENCES evaluaciones(id) ON DELETE CASCADE,
CONSTRAINT fk_ep_criterio FOREIGN KEY (criterio_id) REFERENCES criterios(id)
) ENGINE=InnoDB;
-- ===== 4) Datos iniciales =====
INSERT INTO categorias_competencia (nombre)
VALUES ('ROOKIE'), ('STREET'), ('ULTIMATE');
-- PRESENTACION
INSERT INTO criterios (seccion, nombre, orden) VALUES
('PRESENTACION','PRESENTACION',1),
('PRESENTACION','ESCENARIO',2);
-- EXTERIOR
INSERT INTO criterios (seccion, nombre, orden) VALUES
('EXTERIOR','TEMATICA',1),
('EXTERIOR','INTEGRACION',2),
('EXTERIOR','APARIENCIA',3),
('EXTERIOR','MODIFICACIONES',4),
('EXTERIOR','APLICACION_PINTURA_VINILOS',5),
('EXTERIOR','LIMPIEZA',6);
-- MOTOR
INSERT INTO criterios (seccion, nombre, orden) VALUES
('MOTOR','APARIENCIA',1),
('MOTOR','INTEGRACION',2),
('MOTOR','MODIFICACIONES',3),
('MOTOR','LIMPIEZA',4);
-- INTERIOR
INSERT INTO criterios (seccion, nombre, orden) VALUES
('INTERIOR','APARIENCIA',1),
('INTERIOR','TEMATICA',2),
('INTERIOR','INTEGRACION',3),
('INTERIOR','MODIFICACIONES',4),
('INTERIOR','LIMPIEZA',5);
-- AUDIO Y SEGURIDAD
INSERT INTO criterios (seccion, nombre, orden) VALUES
('AUDIO_Y_SEGURIDAD','APARIENCIA',1),
('AUDIO_Y_SEGURIDAD','CREATIVIDAD',2),
('AUDIO_Y_SEGURIDAD','SISTEMA_DE_SEGURIDAD',3),
('AUDIO_Y_SEGURIDAD','SEGURIDAD',4);
-- PUNTOS EXTRAS
INSERT INTO criterios (seccion, nombre, orden) VALUES
('PUNTOS_EXTRAS','BITACORA',1),
('PUNTOS_EXTRAS','FUNCIONALIDAD',2),
('PUNTOS_EXTRAS','ERGONOMIA',3),
('PUNTOS_EXTRAS','ILUMINACION',4),
('PUNTOS_EXTRAS','MOTORIZACIONES',5);