Facultad de Ingeniería
Carrera de Ingeniería de Sistemas e Informática
Tema:
Proyecto Final – Base de Datos
Curso
Base de Datos (17899)
Docente: Kelvin Celso Macedo Ylachoque
Integrantes:
Paulocesar Donovan Olivera Bautista U22311356
Erik Manuel Huamán Garriazo U22213662
Sistema de gestión de Reserva de un Hotel
2024
Identidad de la Empresa: Hotel Hatunkay
En un mundo cada vez más conectado y dinámico, la industria hotelera se enfrenta al
desafío constante de proporcionar experiencias excepcionales y servicios de calidad a
sus huéspedes. Con más de 20 años de trayectoria en la ciudad de Lima y Cajamarca, el
Hotel Hatunkay se ha distinguido por ofrecer un trato familiar y cercano, buscando
siempre que sus clientes se sientan como en casa durante su estancia. En línea con su
visión de proveer la mejor experiencia a sus huéspedes, surge la necesidad de
modernizar sus procesos y servicios, adaptándose a las demandas del mercado actual.
Por ello, me complace presentar el proyecto de implementación de un Sistema de
Reservas en el Hotel Hatunkay. Este sistema representa un paso adelante en la misión
de ofrecer servicios de alojamiento de calidad, mejorando la experiencia tanto para los
huéspedes como para el equipo interno. Al facilitar el proceso de reserva y gestión de
habitaciones, buscando optimizar la eficiencia operativa y garantizar la satisfacción total
de los clientes.
En este documento, exploraremos los detalles de este proyecto, desde su justificación
hasta su implementación y beneficios esperados. Me enfocare en cómo el sistema de
reservas en línea no solo mejorará la experiencia de reserva para los clientes, sino que
también fortalecerá la posición competitiva en el mercado y reforzará la reputación
como un destino hospitalario y acogedor.
Descripción del Proceso en un Hotel
1. Reserva de Habitación:
o El cliente entra al sistema del hotel.
o El cliente busca la disponibilidad de habitaciones.
o El cliente selecciona la habitación y las fechas de estancia.
o El cliente proporciona sus datos personales y confirma la reserva.
o El sistema genera una reserva y envía una confirmación al cliente.
2. Check-in:
o El cliente llega al hotel y se presenta en la recepción.
o El personal del hotel verifica la reserva y asigna la habitación.
o El cliente recibe la llave de la habitación.
3. Estancia:
o Durante la estancia, el cliente puede solicitar servicios adicionales (por
ejemplo, servicio de habitación, spa).
o Los servicios adicionales son registrados en la cuenta de la reserva del
cliente.
4. Check-out:
o El cliente se presenta en la recepción para hacer el check-out.
o El personal del hotel verifica los servicios adicionales y calcula el total a
pagar.
o El cliente realiza el pago y entrega la llave de la habitación.
o El sistema registra el pago y actualiza el estado de la reserva.
5. Valoración del Servicio:
o Después de la estancia, el cliente puede recibir una solicitud para valorar
su experiencia.
o El cliente deja un comentario y una valoración.
o El sistema almacena la valoración y el comentario.
4. Modelamiento
4.1 Identificación de Entidades:
1. Cliente: La tabla “Cliente” almacena información sobre los clientes del hotel,
incluyendo su identificador único, nombre, apellido, correo electrónico único,
número de teléfono y fecha de registro en el sistema.
2. TipoHabitacion: La tabla “TipoHabitacion” define los diferentes tipos de
habitaciones disponibles en el hotel, detallando el identificador único, nombre,
descripción, capacidad máxima de personas y el precio por noche para cada tipo
de habitación.
3. Habitacion: La tabla “Habitación” contiene información sobre las habitaciones
individuales del hotel, especificando el identificador único de cada habitación, el
tipo de habitación al que pertenece, el número de la habitación y su estado actual
(Disponible, Ocupada o en Mantenimiento).
4. Servicio: La tabla “Servicio” detalla los servicios adicionales ofrecidos por el
hotel a los huéspedes, incluyendo el identificador único de cada servicio, su
nombre, descripción y precio.
5. Reserva: La tabla “Reserva” registra las reservas realizadas por los clientes, con
detalles como el identificador único de la reserva, el cliente que realizó la
reserva, la habitación reservada, las fechas de inicio y fin de la reserva, el estado
de la reserva (Pendiente, Confirmada o Cancelada), la cantidad de personas
incluidas y el monto total a pagar.
6. ReservaServicio: La tabla “ReservaServicio” asocia los servicios adicionales
con las reservas realizadas, especificando el identificador de la reserva y del
servicio, junto con la cantidad solicitada de cada servicio.
7. Comentario: La tabla “Comentario” almacena los comentarios y valoraciones
realizados por los clientes sobre su estancia, incluyendo un identificador único
para cada comentario, el cliente que lo realizó, la reserva a la que se refiere, el
texto del comentario, la valoración numérica y la fecha en que se realizó.
8. TransaccionPago: La tabla “TransaccionPago” registra las transacciones de
pago asociadas a las reservas, detallando el identificador único de cada
transacción, la reserva relacionada, el monto del pago, la fecha de la transacción
y el estado del pago (Pendiente, Aprobado o Rechazado).
9. PersonalHotel: La tabla “PersonalHotel” almacena información sobre el
personal del hotel, incluyendo su identificador único, nombre, apellido, puesto o
rol, fecha de contratación y opcionalmente la reserva asignada al personal si
aplica, referenciando la tabla “Reserva”.
4.2 Trazar Primer Diagrama:
4.3 Relación de Entidades
TipoHabitacion y Habitacion
Relación: Uno a Muchos (1)
Descripción: Un tipo de habitación puede tener muchas habitaciones, pero una
habitación pertenece a un solo tipo de habitación.
Atributos de Relación: id_tipo en Habitacion referencia id_tipo en
TipoHabitacion.
Habitacion y Reserva
Relación: Uno a Muchos (1)
Descripción: Una habitación puede tener muchas reservas a lo largo del tiempo,
pero una reserva está asociada a una sola habitación.
Atributos de Relación: id_habitacion en Reserva referencia id_habitacion en
Habitacion.
Cliente y Reserva
Relación: Uno a Muchos (1)
Descripción: Un cliente puede hacer muchas reservas, pero una reserva es hecha
por un solo cliente.
Atributos de Relación: id_cliente en Reserva referencia id_cliente en Cliente.
Cliente y Comentario
Relación: Uno a Muchos (1)
Descripción: Un cliente puede dejar muchos comentarios, pero un comentario es
dejado por un solo cliente.
Atributos de Relación: id_cliente en Comentario referencia id_cliente en Cliente.
Reserva y Comentario
Relación: Uno a Muchos (1)
Descripción: Una reserva puede tener muchos comentarios, pero un comentario
está asociado a una sola reserva.
Atributos de Relación: id_reserva en Comentario referencia id_reserva en
Reserva.
Reserva y Servicio (a través de ReservaServicio)
Relación: Muchos a Muchos (M)
Descripción: Una reserva puede incluir muchos servicios, y un servicio puede
ser incluido en muchas reservas.
Atributos de Relación: id_reserva en ReservaServicio referencia id_reserva en
Reserva; id_servicio en ReservaServicio referencia id_servicio en Servicio.
Reserva y TransaccionPago
Relación: Uno a Muchos (1)
Descripción: Una reserva puede tener muchas transacciones de pago (por
ejemplo, pagos parciales), pero una transacción de pago está asociada a una sola
reserva.
Atributos de Relación: id_reserva en TransaccionPago referencia id_reserva en
Reserva.
Reserva y PersonalHotel (a través de la referencia id_reserva en PersonalHotel)
Relación: Muchos a Uno (M:1) (Opcional, dependiendo de la estructura de datos
específica)
Descripción: Muchas reservas pueden ser gestionadas por el mismo personal del
hotel, pero este es un aspecto más operacional y puede variar dependiendo del
diseño del sistema.
4.4 Identificación de Atributos:
El siguiente es paso es identificar los atributos para cada conjunto de entidades.
Cliente
Id de cliente
nombre
apellido
email
teléfono
fecha de registro
Habitación
Id de habitación
Id del tipo de habitación
numero
estado
TipoHabitacion
Id del tipo de habitación
nombre
descripción
capacidad
precio
PersonalHotel
Id de personal
nombre
apellido
puesto
fecha de contratación
Reserva
Id de reserva
id de cliente
id de habitacion
fecha de inicio
fecha de fin
estado
cantidad de personas
total de pago
Servicio
Id de servicio
nombre
descripción
precio
ReservaServicio
Id de reserva
Id de servicio
cantidad
Comentario
Id de comentario
id de cliente
id de reserva
comentario
valoración
fecha de comentario
TransaccionPago
Id de transacción
Id de reserva
monto
fecha de transaccion
estado de pago
4.5 Selección de claves Principales:
TipoHabitacion
Clave Principal: id_tipo
Descripción: Identificador único para cada tipo de habitación.
Tipo: INT
Habitacion
Clave Principal: id_habitacion
Descripción: Identificador único para cada habitación.
Tipo: INT
Cliente
Clave Principal: id_cliente
Descripción: Identificador único para cada cliente.
Tipo: INT
PersonalHotel
Clave Principal: id_personal
Descripción: Identificador único para cada miembro del personal.
Tipo: INT
Reserva
Clave Principal: id_reserva
Descripción: Identificador único para cada reserva.
Tipo: INT
Servicio
Clave Principal: id_servicio
Descripción: Identificador único para cada servicio ofrecido.
Tipo: INT
ReservaServicio
Clave Principal: id_reserva, id_servicio
Descripción: Combinación única de reserva y servicio.
Tipo: INT (ambos)
Comentario
Clave Principal: id_comentario
Descripción: Identificador único para cada comentario.
Tipo: INT
TransaccionPago
Clave Principal: id_transaccion
Descripción: Identificador único para cada transacción de pago.
4.5 Modelo Lógico:
4.6 Diccionario de datos
Tabla Descripción Columna Tipo de Restricciones Relaciones
Dato
Cliente Almacena id_cliente INT PRIMARY KEY
información sobre nombre VARCHA
los clientes del hotel. R(50)
apellido VARCHA
R(50)
email VARCHA UNIQUE
R(100)
telefono VARCHA
R(15)
fecha_registro DATE
TipoHabit Define los diferentes id_tipo INT PRIMARY KEY
acion tipos de habitaciones nombre VARCHA
disponibles en el R(50)
hotel. descripcion TEXT
capacidad INT
precio DECIMAL
(18, 2)
Habitacion Contiene id_habitacion INT PRIMARY KEY
información sobre las id_tipo INT FOREIGN KEY TipoHabitaci
habitaciones REFERENCES on(id_tipo)
individuales del TipoHabitacion(id
hotel. _tipo)
numero INT
estado VARCHA CHECK (estado
R(15) IN ('Disponible',
'Ocupada',
'Mantenimiento'))
Servicio Detalla los servicios id_servicio INT PRIMARY KEY
adicionales que el nombre VARCHA
hotel ofrece a los R(180)
huéspedes. descripcion TEXT
precio DECIMAL
(18, 2)
Reserva Registra las reservas id_reserva INT PRIMARY KEY
realizadas por los id_cliente INT FOREIGN KEY Cliente(id_cl
clientes. REFERENCES iente)
Cliente(id_cliente
)
id_habitacion INT FOREIGN KEY Habitacion(i
REFERENCES d_habitacion
Habitacion(id_ha )
bitacion)
fecha_inicio DATE
fecha_fin DATE
estado VARCHA CHECK (estado
R(10) IN ('Pendiente',
'Confirmada',
'Cancelada'))
cantidad_perso INT
nas
total_pago DECIMAL
(18, 2)
ReservaSe Asocia servicios id_reserva INT PRIMARY KEY, Reserva(id_r
rvicio adicionales con las FOREIGN KEY eserva),
reservas realizadas. REFERENCES Servicio(id_s
Reserva(id_reserv ervicio)
a) PRIMARY
KEY, FOREIGN
KEY
REFERENCES
Servicio(id_servic
io)
id_servicio INT
cantidad INT
Comentari Almacena id_comentario INT PRIMARY KEY
o comentarios y id_cliente INT FOREIGN KEY Cliente(id_cl
valoraciones REFERENCES iente)
realizadas por los Cliente(id_cliente
clientes sobre su )
estancia. id_reserva INT FOREIGN KEY Reserva(id_r
REFERENCES eserva)
Reserva(id_reserv
a)
comentario TEXT
valoracion INT
fecha_comenta DATE
rio
Transaccio Registra las id_transaccion INT PRIMARY KEY
nPago transacciones de id_reserva INT FOREIGN KEY Reserva(id_r
pago asociadas a las REFERENCES eserva)
reservas. Reserva(id_reserv
a)
monto DECIMAL
(18, 2)
fecha_transacc DATE
ion
estado_pago VARCHA CHECK
R(10) (estado_pago IN
('Pendiente',
'Aprobado',
'Rechazado'))
PersonalH Almacena id_personal INT PRIMARY KEY
otel información sobre el nombre VARCHA
personal que trabaja R(50)
en el hotel. apellido VARCHA
R(50)
puesto VARCHA
R(50)
fecha_contrata DATE
cion
id_reserva INT FOREIGN KEY Reserva(id_r
REFERENCES eserv
Reserva(id_reserv
a)
5. Implementación:
5.1 Creación e Inserción:
Tabla Cliente:
Tabla Habitación:
Tabla Tipo de Habitación:
Tabla Personal Hotel:
Tabla Reserva:
Tabla Servicio:
Tabla Reserva y Servicio:
Tabla Transacción Pago:
Tabla Comentario:
5.2 Consultas:
5.2.1 Consultas Simples:
Se desea mostrar: Todos los clientes que se han registrado en el sistema después del 1 de julio
de 2024. Esto ayuda a identificar clientes recientes.
SELECT * FROM Cliente
WHERE fecha_registro < '2024-01-20';
Se desea mostrar: Todas las habitaciones cuyo estado es 'Disponible'. Esto permite ver qué
habitaciones están libres para ser reservadas.
SELECT * FROM Habitacion WHERE estado = 'Disponible';
5.2.2 Consultas con grupo:
Se desea mostrar: El número total de reservas que ha hecho cada cliente. La columna
num_reservas indica cuántas reservas tiene cada cliente.
Se desea mostrar: La cantidad total de pagos agrupados por el estado de pago
(estado_pago). Esto proporciona una visión del total pagado según cada estado (por ejemplo,
'Pendiente', 'Completo').
SELECT estado_pago, SUM(monto) AS total_pagado
FROM TransaccionPago
GROUP BY estado_pago;
5.2.3 Procedimientos almacenados
Se desea realizar: Un procedimiento almacenado que, al proporcionar el id_cliente,
devuelve todas las reservas realizadas por ese cliente. Esto facilita la consulta de reservas
específicas de un cliente.
CREATE PROCEDURE ObtenerReservasPorCliente
@id_cliente INT
AS
BEGIN
SELECT * FROM Reserva
WHERE id_cliente = @id_cliente;
END;
EXEC ObtenerReservasPorCliente @id_cliente = 304;
Se desea realizar: Un procedimiento almacenado que actualiza el estado de una reserva
específica, permitiendo modificar el estado de la reserva a uno nuevo proporcionado
como parámetro.
CREATE PROCEDURE ActualizarEstadoReserva
@id_reserva INT,
@nuevo_estado VARCHAR(50)
AS
BEGIN
UPDATE Reserva
SET estado = @nuevo_estado
WHERE id_reserva = @id_reserva;
END;
EXEC ActualizarEstadoReserva @id_reserva = 506, @nuevo_estado =
'Confirmada';
SELECT [estado] FROM [dbo].[Reserva]
5.2.4 Funciones
Se desea realizar: Una función que calcula el total de pago para una reserva específica
sumando el precio de todos los servicios asociados a esa reserva.
CREATE FUNCTION CalcularTotalPago (@id_reserva INT)
RETURNS DECIMAL(10, 2)
AS
BEGIN
DECLARE @total DECIMAL(10, 2);
SELECT @total = SUM(precio) FROM ReservaServicio
JOIN Servicio ON ReservaServicio.id_servicio = Servicio.id_servicio
WHERE ReservaServicio.id_reserva = @id_reserva;
RETURN @total;
END;
SELECT dbo.CalcularTotalPago(508) AS TotalPago;
Se desea realizar: Una función que calcula el número de noches entre dos fechas dadas, lo cual
es útil para determinar la duración de una estadía.
CREATE FUNCTION CalcularNoches (@fecha_inicio DATE, @fecha_fin DATE)
RETURNS INT
AS
BEGIN
RETURN DATEDIFF(DAY, @fecha_inicio, @fecha_fin);
END;
SELECT dbo.CalcularNoches('2024-07-01', '2024-07-10') AS NumeroDeNoches;
5.2.5 Vistas
Se desea mostrar: Una vista que combina información sobre las reservas, clientes y
habitaciones, proporcionando una vista completa de todas las reservas, incluyendo el nombre
del cliente, el número de la habitación, y otros detalles relevantes.
CREATE VIEW VistaReservas AS
SELECT
r.id_reserva,
c.nombre AS cliente_nombre,
c.apellido AS cliente_apellido,
h.numero AS habitacion_numero,
r.fecha_inicio,
r.fecha_fin,
r.estado,
r.cantidad_personas,
r.total_pago
FROM Reserva r
JOIN Cliente c ON r.id_cliente = c.id_cliente
JOIN Habitacion h ON r.id_habitacion = h.id_habitacion;
SELECT * FROM VistaReservas;
Se desea mostrar: Una vista que presenta el total de ingresos generados por cada servicio,
calculado a partir de la cantidad de servicios solicitados multiplicada por su precio. Esto ayuda
a analizar el rendimiento financiero de cada servicio.
CREATE VIEW VistaIngresosPorServicio AS
SELECT
ser.nombre AS servicio_nombre,
SUM(rs.cantidad * ser.precio) AS total_ingresos
FROM ReservaServicio rs
JOIN Servicio ser ON rs.id_servicio = ser.id_servicio
GROUP BY ser.nombre;
GO
Select * from VistaIngresosPorServicio
6. Administración
6.1 Creación de Back Up
Vamos donde nuestra base de datos y damos anticlic ahí escogemos “Tasks” luego
hacemos clic en “Back up”.
Seleccionamos Full:
Ponemos el nombre de nuestro “Back up”
Luego verificamos el “Back up”
6.1 Creación de Usuarios
Nos vamos a “security” y luego “logins” y luego seleccionamos “New login”:
Después le damos lo roles que tendrá.
Después la base de datos que queremos que use.
Luego verificamos el usuario que creamos:
Nos conectamos:
7. Conclusiones
7.1 Conclusiones:
El sistema de gestión de reservas propuesto para el Hotel Hatunkay está bien
estructurado, con un modelo de datos completo y relaciones adecuadas entre las
tablas.
La identificación de entidades, atributos y claves primarias está clara, facilitando
la integridad de los datos y la ejecución eficiente de consultas y procedimientos.
Las consultas SQL, procedimientos almacenados, funciones y vistas
proporcionan herramientas útiles para la administración y análisis de reservas,
pagos y servicios.
Los procesos de administración como la creación de copias de seguridad y
usuarios están bien definidos, asegurando la seguridad y mantenimiento
adecuado del sistema.
7.2 Recomendaciones:
Realizar pruebas exhaustivas del sistema para verificar la funcionalidad y
detectar posibles errores antes de su implementación en el entorno real.
Capacitar al personal del hotel en el uso del nuevo sistema para asegurar una
transición fluida y una adopción efectiva.
Considerar la integración de módulos adicionales para la gestión de promociones
y descuentos, lo que podría mejorar aún más la experiencia del cliente y la
eficiencia operativa.
Monitorear el rendimiento del sistema después de su implementación para
realizar ajustes y mejoras según sea necesario.
Referencias Bibliográficas
Ramos, J. (2012). Sistemas de bases de datos: Diseño, implementación y
administración. Alfaomega.
Méndez, A., & Martínez, M. (2018). Diseño y administración de bases de
datos. McGraw-Hill Interamericana.
Morales, F. (2017). Administración de bases de datos relacionales. Editorial
Reverte.
García, J. R. (2015). Fundamentos de sistemas de información. Pearson
Educación.
Cordero, J. L. (2019). Gestión de bases de datos y sistemas de información.
Editorial UOC.
Zamora, A. (2020). Introducción a las bases de datos: Teoría y práctica.
Ediciones Paraninfo.
López, R. (2016). Administración y diseño de bases de datos. Editorial
Universitaria.
Núñez, C. (2014). Modelado de datos y diseño de bases de datos. Ediciones
Edet.