diff --git a/bd.sql b/bd.sql new file mode 100644 index 0000000..fe44ff0 --- /dev/null +++ b/bd.sql @@ -0,0 +1,89 @@ +-- Creación de la base de datos +CREATE DATABASE IF NOT EXISTS boletos_db; +USE boletos_db; + +-- Tabla de salas +CREATE TABLE IF NOT EXISTS salas ( + id INT AUTO_INCREMENT PRIMARY KEY, + nombre VARCHAR(100) NOT NULL, + filas INT NOT NULL, + asientos_por_fila INT NOT NULL +); + +-- Tabla de boletos +CREATE TABLE IF NOT EXISTS boletos ( + id INT AUTO_INCREMENT PRIMARY KEY, + id_sala INT NOT NULL, + fila INT NOT NULL, + numero INT NOT NULL, + precio DECIMAL(10,2) NOT NULL, + estado ENUM('disponible', 'vendido') DEFAULT 'disponible', + FOREIGN KEY (id_sala) REFERENCES salas(id), + UNIQUE KEY unique_asiento (id_sala, fila, numero) +); + +-- Tabla de ventas +CREATE TABLE IF NOT EXISTS ventas ( + id VARCHAR(36) PRIMARY KEY, + fecha DATETIME NOT NULL, + nombre_cliente VARCHAR(100) NOT NULL, + total DECIMAL(10,2) NOT NULL +); + +select * from ventas; + +select * from venta_boletos; + +select * from boletos; + +-- Tabla relacional venta-boletos +CREATE TABLE IF NOT EXISTS venta_boletos ( + id INT AUTO_INCREMENT PRIMARY KEY, + id_venta VARCHAR(36) NOT NULL, + id_boleto INT NOT NULL, + FOREIGN KEY (id_venta) REFERENCES ventas(id), + FOREIGN KEY (id_boleto) REFERENCES boletos(id), + UNIQUE KEY unique_venta_boleto (id_venta, id_boleto) +); + +-- Insertar una sala de ejemplo +INSERT INTO salas (id, nombre, filas, asientos_por_fila) +VALUES (1, 'Sala Principal', 10, 15); + +-- Procedimiento para inicializar boletos +DELIMITER // +CREATE PROCEDURE InicializaBoletos(IN sala_id INT, IN precio DECIMAL(10,2)) +BEGIN + DECLARE i INT DEFAULT 1; + DECLARE j INT DEFAULT 1; + DECLARE total_filas INT DEFAULT 0; + DECLARE total_asientos INT DEFAULT 0; + + -- Obtener dimensiones de la sala + SELECT filas, asientos_por_fila INTO total_filas, total_asientos + FROM salas WHERE id = sala_id; + + -- Depuración: Verificar valores obtenidos + SELECT CONCAT('Filas:', total_filas, ' Asientos:', total_asientos) AS Debug_Info; + + -- Si no se encuentran filas/asientos, salir del procedimiento + IF total_filas = 0 OR total_asientos = 0 THEN + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Sala no encontrada o sin dimensiones definidas'; + END IF; + + -- Eliminar boletos existentes de la sala + DELETE FROM boletos WHERE id_sala = sala_id; + + -- Crear nuevos boletos + SET i = 1; + WHILE i <= total_filas DO + SET j = 1; + WHILE j <= total_asientos DO + INSERT INTO boletos (id_sala, fila, numero, precio, estado) + VALUES (sala_id, i, j, precio, 'disponible'); + SET j = j + 1; + END WHILE; + SET i = i + 1; + END WHILE; +END // +DELIMITER ; \ No newline at end of file