Aplicación web para gestionar clientes, clases e inscripciones de un gimnasio, sobre una base de datos Oracle diseñada desde cero: modelo relacional, secuencias, triggers y control de cupos dentro de la propia base de datos.
- 📊 Dashboard con clientes registrados, clases programadas, reservas activas y las 10 reservas más recientes
- 👤 Clientes: crear, editar y eliminar, con cédula y email únicos
- 🗓️ Clases: horario, capacidad máxima e instructor asignado
- ✅ Reservas: inscribir clientes en clases, cambiar su estado (activa o cancelada) y eliminarlas
- 🚫 Control de cupos en la base de datos: un trigger impide reservar cuando una clase ya está llena, aunque se intente desde fuera de la app
INSTRUCTOR 1 ───< CLASE 1 ───< RESERVA >─── 1 CLIENTE
| Tabla | Qué guarda | Claves |
|---|---|---|
CLIENTE |
Cédula, nombre, email, teléfono, fecha de registro | PK id_cliente · únicos: cédula, email |
INSTRUCTOR |
Cédula, nombre, especialidad | PK id_instructor · único: cédula |
CLASE |
Nombre, fecha, horario, capacidad máxima | PK id_clase · FK instructor |
RESERVA |
Cliente, clase, fecha y estado | PK id_reserva · FK cliente y clase |
Lo que hace la base de datos por sí sola:
- Secuencias + triggers
BEFORE INSERTgeneran los IDs automáticamente (Oracle 11g no tieneIDENTITY). TRG_CONTROL_CUPOScuenta las reservas activas de la clase y lanzaORA-20001si ya no hay cupo.- Las claves foráneas usan
ON DELETE CASCADEpara no dejar reservas huérfanas.
- Consultas parametrizadas en todas las operaciones (previenen SQL injection)
COMMIT/ROLLBACKexplícitos en cada transacción- Credenciales fuera del código: se leen de un archivo
.envque no se versiona - Si la base de datos no responde, la app sigue mostrando la interfaz con un aviso, en vez de caerse
Python · Flask · Oracle Database · python-oracledb · PL/SQL · HTML · CSS · JavaScript
-
Crea la base de datos: ejecuta en SQL Developer (o SQL*Plus) los scripts de
sql/en orden:Script Qué hace 01_esquema_y_datos.sqlTablas, secuencias, triggers y datos de ejemplo 02_consultas_verificacion.sqlConsultas para revisar los datos 03_cupos_disponibles.sqlCupos disponibles por clase -
Instala las dependencias:
pip install -r requirements.txt
-
Configura la conexión: copia
.env.examplecomo.envy completa usuario, contraseña y DSN. Si usas Oracle 11g, indica tambiénORACLE_CLIENT_DIR(carpetabindel cliente Oracle) para activar el modo thick. -
Arranca la app:
python app.py
y abre http://localhost:5000.
├── app.py # Backend Flask: rutas y acceso a Oracle
├── templates/
│ └── index.html # Interfaz (dashboard, clientes, clases, reservas)
├── static/
│ ├── style.css # Estilos (modo oscuro)
│ └── app.js # Frontend: navegación entre secciones, formularios y búsqueda en tablas
├── sql/ # Scripts de la base de datos
├── requirements.txt
└── .env.example # Plantilla de configuración
Proyecto en equipo (Grupo G6) de la asignatura Bases de Datos Relacionales, Ingeniería de Sistemas, Universidad Libre (Cali).
Miguel Ángel González: GitHub · Portafolio · X
