36. Base de datos de las reservas

 

Estructura y Funcionamiento de la Base de Datos para el Sistema de Reservas de Hotel

En este artículo exploraremos cómo hemos diseñado la base de datos para gestionar las reservas de nuestro sistema hotelero, una parte fundamental que determina la eficiencia y escalabilidad de toda la aplicación.

La Importancia de un Diseño Bien Planificado

Como mencionamos al inicio, es crucial definir una estructura sólida desde el principio para evitar tener que hacer correcciones mayores más adelante. En el desarrollo de software, cambiar la estructura de la base de datos en etapas avanzadas puede ser costoso y problemático.

Tabla Principal: Reservas

La tabla reservas es el corazón de nuestro sistema de gestión. Veamos sus campos clave:

sql
Copy
Download
CREATE TABLE `reservas` (
  `id_reserva` int(11) NOT NULL,
  `id_habitacion` int(11) NOT NULL,
  `id_usuario` int(11) NOT NULL,
  `pago_reserva` float NOT NULL,
  `numero_transaccion` text NOT NULL,
  `codigo_reserva` text NOT NULL,
  `descripcion_reserva` text NOT NULL,
  `fecha_ingreso` date NOT NULL,
  `fecha_salida` date NOT NULL,
  `fecha_reserva` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Campos Destacados:

  1. Relaciones esenciales:

    • id_habitacion: Conecta con la tabla de habitaciones

    • id_usuario: Vincula la reserva con el usuario registrado

  2. Información financiera:

    • pago_reserva: Almacena el monto pagado

    • numero_transaccion: Para seguimiento de pagos

  3. Identificación única:

    • codigo_reserva: Código alfanumérico para búsquedas fáciles

  4. Detalles temporales:

    • Fechas de ingreso, salida y creación de la reserva

Tabla de Habitaciones

La tabla habitaciones almacena toda la información sobre las opciones de alojamiento:

sql
Copy
Download
CREATE TABLE `habitaciones` (
  `id_h` int(11) NOT NULL,
  `tipo_h` int(11) NOT NULL,
  `estilo` text NOT NULL,
  `galeria` text NOT NULL,
  `video` text NOT NULL,
  `recorrido_virtual` text NOT NULL,
  `descripcion_h` text NOT NULL,
  `fecha_h` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Características importantes:

  • Multimedia: Campos para galerías de imágenes, videos y recorridos virtuales

  • Descripciones detalladas: Incluyen información sobre planes y precios

  • Clasificación: Por tipo y estilo de habitación

Relaciones entre Tablas

Hemos establecido una relación entre:

  • reservas.id_habitacion → habitaciones.id_h

Esta relación nos permite:

  1. Obtener todos los detalles de la habitación reservada

  2. Verificar disponibilidad

  3. Mostrar información relevante al usuario

Ejemplo de Datos

Para ilustrar cómo interactúan estas tablas, veamos algunos datos de ejemplo:

Reserva:

sql
Copy
Download
INSERT INTO `reservas` VALUES 
(4, 3, 1, 860000, '18690179', 'WXKZJP19C', 
'Habitación Suite Africana - Plan Luna de Miel - 2 personas', 
'2019-04-19', '2019-04-21', '2019-04-12 03:42:49');

Habitación correspondiente:

sql
Copy
Download
INSERT INTO `habitaciones` VALUES 
(3, 1, 'Africana', '["vistas/img/suite/africana01.jpg",...]', 
'JTu790_yyRc', 'vistas/img/suite/africana-360.jpg', 
'<p>Lorem ipsum dolor sit amet...', '2019-04-09 02:08:56');

Flujo de Trabajo del Sistema

  1. Registro de usuario: Requisito previo para hacer reservas

  2. Selección de habitación: El usuario elige entre las opciones disponibles

  3. Creación de reserva: Se registran todos los detalles en la tabla reservas

  4. Confirmación: Se genera un código único para identificar la reserva

Consideraciones de Diseño

  • Normalización: Hemos separado la información en tablas relacionadas para evitar redundancia

  • Escalabilidad: La estructura permite añadir más campos o tablas en el futuro

  • Rendimiento: Los índices y relaciones están optimizados para consultas rápidas

Conclusión

Esta estructura de base de datos proporciona una base sólida para nuestro sistema de reservas hoteleras, permitiendo:

  • Gestión eficiente de reservas

  • Consultas rápidas de disponibilidad

  • Generación de reportes

  • Integración con otros sistemas (pagos, CRM, etc.)

Comentarios

Entradas más populares de este blog

37. Enviando datos de la reserva - parte 1

40-pintar con php

42. Validar cruce de fechas - parte 1