Proyecto_venta_boletos/Proyecto/conf/bd.sql

89 lines
2.6 KiB
SQL

-- 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 ;