89 lines
2.6 KiB
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 ; |