-- 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 ; CALL InicializaBoletos(1, 50.00);