Este proyecto de referencia presenta el diseño e implementación de una base de datos relacional completa para un casino hotelero. El esquema cubre la gestión de juegos, sesiones de clientes, registro de apuestas, torneos, administración de empleados, reservas de habitaciones, parqueadero y transacciones con tokens. Fue desarrollado como ejemplo guía dentro del curso Bases de Datos Relacionales 2026-I y puede servir como punto de partida o plantilla de comparación para los proyectos propios de los estudiantes.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/tutosrive/db-relacionales-2026-1/llms.txt
Use this file to discover all available pages before exploring further.
Este proyecto fue diseñado originalmente para MySQL 8. Los tipos de dato
AUTO_INCREMENT, la sintaxis de llave foránea y algunas funciones de fecha difieren en PostgreSQL. Para migrar el esquema, reemplaza AUTO_INCREMENT por SERIAL (o GENERATED ALWAYS AS IDENTITY) y ajusta los tipos DATETIME a TIMESTAMP.Universo de Discurso
El casino hotelero se identifica con un NIT único (nitCasino) y registra su ubicación y capacidad máxima de clientes. Ofrece un catálogo de juegos (póker, ruleta, blackjack, etc.) cada uno con su tipo, nombre y descripción, todos vinculados al casino. Los clientes registrados participan en sesiones de juego (sesionjuego) que pueden asociarse a un empleado supervisor y a un torneo activo. Dentro de cada sesión el cliente genera una o varias apuestas de las que se registra el monto, la fecha/hora, el resultado y la ganancia.
El establecimiento también gestiona gerentes que supervisan al personal, empleados referenciados a su gerente, y servicios adicionales como el parqueadero (con control de placa, tipo de vehículo y tarifa por hora) registrado en compraticket, la reserva de habitaciones con desglose de tarifas, y un sistema de tokens cuyas transacciones de compra/canje se almacenan en transacciontoken. Las máquinas expendedoras son operadas por operadores externos registrados en operadorxmaquina. Los torneos tienen premio, capacidad, fechas y estado, y están vinculados al casino.
Esquema Relacional
Diagrama Entidad-Relación
Consultas SQL de Referencia
Las siguientes consultas ilustran los patrones más comunes que deben cubrirse en el proyecto.- Agregación y ranking
- JOINs múltiples
- Subconsultas
- Parqueadero
Diccionario de Datos
casino
casino
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
nitCasino | INT | PK, NOT NULL | Número de identificación tributaria del casino. Clave natural del negocio. |
ubicacion | VARCHAR(255) | — | Dirección física o descripción de la ubicación del establecimiento. |
capacidadClientes | INT | — | Número máximo de clientes que pueden estar simultáneamente en el casino. |
gerente
gerente
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idGerente | INT | PK, AUTO_INCREMENT | Identificador del gerente. |
nombre | VARCHAR(100) | NOT NULL | Nombre del gerente. |
apellido | VARCHAR(100) | NOT NULL | Apellido del gerente. |
cedGerente | VARCHAR(20) | NOT NULL | Cédula del gerente. |
estado | VARCHAR(50) | — | Estado laboral (activo, retirado, etc.). |
empleado
empleado
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idEmpleado | INT | PK, AUTO_INCREMENT | Identificador interno del empleado. |
cedEmpleado | VARCHAR(20) | NOT NULL | Cédula o documento de identidad del empleado. |
nombre | VARCHAR(100) | NOT NULL | Nombre del empleado. |
apellido | VARCHAR(100) | NOT NULL | Apellido del empleado. |
teléfono | VARCHAR(20) | — | Número de contacto del empleado. |
correo | VARCHAR(100) | — | Correo electrónico del empleado. |
salario | DECIMAL(10,2) | — | Salario mensual del empleado. |
idGerente | INT | FK → gerente | Gerente al que reporta el empleado. |
cliente
cliente
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idCliente | INT | PK, AUTO_INCREMENT | Identificador interno del cliente. |
cedCliente | VARCHAR(20) | NOT NULL | Número de cédula o documento de identidad del cliente. |
nombre | VARCHAR(100) | NOT NULL | Primer nombre del cliente. |
apellido | VARCHAR(100) | NOT NULL | Apellido del cliente. |
teléfono | VARCHAR(20) | — | Número de contacto telefónico. |
correo | VARCHAR(100) | — | Correo electrónico del cliente. |
edad | INT | — | Edad del cliente en años. Se recomienda agregar CHECK (edad >= 18) para cumplir la regulación. |
juego
juego
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idJuego | INT | PK, AUTO_INCREMENT | Identificador del tipo de juego. |
tipoJuego | VARCHAR(50) | — | Categoría del juego (ej. mesa, maquina, electronico). |
nombre | VARCHAR(100) | — | Nombre comercial del juego (ej. Blackjack, Ruleta, Póker). |
descripcion | TEXT | — | Descripción general del juego. |
idCasino | INT | FK → casino | Casino al que pertenece el juego. |
torneo
torneo
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idTorneo | INT | PK, AUTO_INCREMENT | Identificador del torneo. |
premio | DECIMAL(10,2) | — | Valor monetario del premio del torneo. |
fechaHoraInicio | DATETIME | — | Fecha y hora de inicio del torneo. |
fechaHoraFinal | DATETIME | — | Fecha y hora de cierre del torneo. |
estado | VARCHAR(50) | — | Estado del torneo: activo, finalizado, cancelado. |
capacidad | INT | — | Máximo de participantes admitidos. |
numParticipantes | INT | — | Cantidad actual de participantes inscritos. |
idCasino | INT | FK → casino | Casino que organiza el torneo. |
sesionjuego
sesionjuego
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idSesion | INT | PK, AUTO_INCREMENT | Identificador de la sesión de juego. |
idJuego | INT | FK → juego | Juego que se disputa en la sesión. |
idCliente | INT | FK → cliente | Cliente que participa en la sesión. |
fechaHoraInicio | DATETIME | — | Marca de tiempo de inicio de la sesión. |
fechaHoraFinal | DATETIME | — | Marca de tiempo de fin; NULL si la sesión está activa. |
idEmpleado | INT | FK → empleado | Empleado (crupier/supervisor) que atiende la sesión. |
idTorneo | INT | FK → torneo | Torneo al que pertenece la sesión, si aplica. |
apuesta
apuesta
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idApuesta | INT | PK, AUTO_INCREMENT | Identificador de la apuesta. |
idSesionJuego | INT | FK → sesionjuego (ON UPDATE CASCADE) | Sesión en la que se realizó la apuesta. |
montoApuesta | DECIMAL(10,2) | — | Valor monetario apostado. |
fechaHora | DATETIME | — | Fecha y hora exacta de la apuesta. |
resultado | VARCHAR(50) | — | Resultado de la apuesta: ganada, perdida, empate. |
montoGanancia | DECIMAL(10,2) | — | Monto recibido por el cliente si ganó; 0 o NULL si perdió. |
habitacion
habitacion
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idHabitacion | INT | PK, AUTO_INCREMENT | Identificador de la habitación. |
capacidad | INT | NOT NULL | Número de personas que admite la habitación. |
tipo | VARCHAR(50) | NOT NULL | Tipo de habitación (sencilla, doble, suite, etc.). |
estado | VARCHAR(50) | NOT NULL | Estado operacional: disponible, ocupada, en mantenimiento. |
reservahabitacion
reservahabitacion
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idReserva | INT | PK, AUTO_INCREMENT | Identificador de la reserva. |
idHabitacion | INT | FK → habitacion | Habitación reservada. |
idCliente | INT | FK → cliente | Cliente que realiza la reserva. |
idMetodoPago | INT | FK → metodopago | Método de pago utilizado. |
fechaHoraInicio | DATETIME | — | Inicio de la estadía. |
fechaHoraFinal | DATETIME | — | Fin de la estadía. |
descripción | TEXT | — | Observaciones o notas de la reserva. |
tarifaxproductoBarato | DECIMAL(10,2) | — | Tarifa unitaria de productos de categoría baja. |
tarifaxproductoMedio | DECIMAL(10,2) | — | Tarifa unitaria de productos de categoría media. |
tarifaxproductoCaro | DECIMAL(10,2) | — | Tarifa unitaria de productos de categoría alta. |
tarifaXdia | DECIMAL(10,2) | — | Tarifa diaria de la habitación. |
total | DECIMAL(10,2) | — | Valor total cobrado por la reserva. |
idEmpleado | INT | FK → empleado | Empleado que gestionó el check-in. |
nProdBarato | INT | — | Cantidad de productos baratos consumidos. |
nProdMedio | INT | — | Cantidad de productos medios consumidos. |
nProdCaro | INT | — | Cantidad de productos caros consumidos. |
parqueadero
parqueadero
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idParqueadero | INT | PK, AUTO_INCREMENT | Identificador del parqueadero. |
motosLibre | INT | — | Espacios disponibles para motos. |
carrosLibre | INT | — | Espacios disponibles para carros. |
capacidad | INT | — | Capacidad total del parqueadero. |
compraticket
compraticket
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idCompra | INT | PK, AUTO_INCREMENT | Identificador del ticket de parqueadero. |
idCliente | INT | FK → cliente (ON UPDATE CASCADE) | Cliente al que se le emite el ticket. |
idParqueadero | INT | FK → parqueadero (ON UPDATE CASCADE) | Parqueadero donde se registra el vehículo. |
placa | VARCHAR(20) | — | Placa del vehículo. |
tipoVehiculo | VARCHAR(50) | — | Tipo de vehículo: carro, moto, bicicleta. |
tarifaxhora | DECIMAL(10,2) | — | Tarifa aplicada por hora de permanencia. |
fechaHoraInicio | DATETIME | — | Hora de ingreso del vehículo. |
fechaHoraFinal | DATETIME | — | Hora de salida del vehículo. |
total | DECIMAL(10,2) | — | Valor total cobrado por el servicio de parqueo. |
estado | VARCHAR(50) | — | Estado del ticket: activo, finalizado, cancelado. |
idMetodoPago | INT | FK → metodopago (ON UPDATE CASCADE) | Método de pago empleado. |
idEmpleado | INT | FK → empleado (ON UPDATE CASCADE) | Empleado que registra la transacción. |
metodopago
metodopago
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idPago | INT | PK, AUTO_INCREMENT | Identificador del método de pago. |
tipoPago | VARCHAR(50) | — | Tipo de pago: efectivo, tarjeta, transferencia. |
datosPago | TEXT | — | Datos adicionales del método (últimos 4 dígitos, banco, etc.). |
token
token
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idToken | INT | PK, AUTO_INCREMENT | Identificador del token. |
valor | DECIMAL(10,2) | — | Valor monetario equivalente del token. |
tipoToken | VARCHAR(50) | — | Categoría del token (bronce, plata, oro, etc.). |
transacciontoken
transacciontoken
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idTransaccion | INT | PK, AUTO_INCREMENT | Identificador de la transacción. |
idToken | INT | FK → token (ON UPDATE CASCADE) | Token involucrado en la transacción. |
idCliente | INT | FK → cliente (ON UPDATE CASCADE) | Cliente que compra o canjea tokens. |
tipoTransaccion | VARCHAR(50) | — | Tipo: compra, canje, transferencia. |
cobro | DECIMAL(10,2) | — | Monto cobrado o debitado en la transacción. |
cantidad | INT | — | Cantidad de tokens involucrados. |
fechaHora | DATETIME | — | Fecha y hora exacta de la transacción. |
idMetodoPago | INT | FK → metodopago (ON UPDATE CASCADE) | Método de pago utilizado. |
idEmpleado | INT | FK → empleado (ON UPDATE CASCADE) | Empleado que gestiona la transacción. |
maquinaexpendedora
maquinaexpendedora
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
numSerie | INT | PK | Número de serie de la máquina. |
capacidad | INT | — | Capacidad de productos que puede almacenar. |
montoDisponible | DECIMAL(10,2) | — | Dinero disponible en la máquina para cambio. |
tipo | VARCHAR(50) | — | Tipo de máquina (bebidas, snacks, tokens). |
operador
operador
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idOperador | INT | PK, AUTO_INCREMENT | Identificador del operador externo. |
cedOperador | VARCHAR(20) | — | Cédula del operador. |
nombre | VARCHAR(100) | — | Nombre del operador o representante. |
nomEmpresa | VARCHAR(100) | — | Nombre de la empresa operadora. |
operadorxmaquina
operadorxmaquina
| Columna | Tipo | Restricciones | Descripción |
|---|---|---|---|
idOperadorMaquina | INT | PK, AUTO_INCREMENT | Identificador del registro de operación. |
fecha | DATE | — | Fecha del servicio o mantenimiento. |
costo | DECIMAL(10,2) | — | Costo del servicio prestado. |
descripcion | TEXT | — | Descripción del servicio o mantenimiento realizado. |
maquinaExp | INT | FK → maquinaexpendedora (ON UPDATE CASCADE) | Máquina a la que se le prestó el servicio. |
idOperador | INT | FK → operador (ON UPDATE CASCADE) | Operador que realizó el servicio. |
Posibles Extensiones del Esquema
Restricción de Edad
Añadir
CHECK (edad >= 18) en la tabla cliente para garantizar que el sistema no admita menores de edad, cumpliendo la regulación de casinos en Colombia.Historial de Estados de Habitación
Crear una tabla
historial_estado_habitacion(id, idHabitacion, estado, fechaCambio, motivo) para auditar los cambios de estado y calcular tiempos de disponibilidad.Integración pgvector
Agregar una columna
embedding vector(384) en la tabla juego para permitir búsqueda semántica de juegos similares a partir de su descripción en lenguaje natural.Tabla de Servicios del Hotel
Agregar una tabla
servicio(idServicio, nombre, descripcion, precio) para registrar servicios del hotel (spa, restaurante, bar) y relacionarla con los clientes hospedados.