El corazón de la base de datos de sistema hotelero es la tabla reservation, ya que es la que conecta todo: relaciona un client (quién se hospeda), una room (dónde se hospeda) y un user (quién registró la reserva en el sistema).
La tabla room, por su parte, no guarda su propio precio, sino que lo hereda de room_type a través de room_type_id, así que si cambias el precio de un tipo de habitación, se actualiza automáticamente para todas las habitaciones de ese tipo.
Por último, payment se relaciona con reservation y permite registrar varios pagos para una misma reserva, ya sean abonos parciales o el pago completo.
Este modelo de base de datos es parte de mi Directorio Maestro de Modelos de Bases de Datos.

El modelo de base de datos es simple y consta de 6 tablas.
- user: Tabla de usuarios del sistema, quienes inician sesión y gestionan las reservas.
- client: Tabla para manejar los clientes del hotel.
- room_type: Tabla para manejar los tipos de habitación y su precio.
- room: Tabla de habitaciones.
- reservation: Tabla de reservas.
- payment: Tabla de pagos.
Como ven las tablas son fáciles y ahora veamos la explicación de cada tabla.
User
La tabla user tiene 5 campos:
- id: llave primaria.
- name: el nombre del usuario.
- email: el correo con el que inicia sesión.
- password: la contraseña del usuario.
- created_at: la fecha de creación del usuario.
create table user (
id int not null auto_increment primary key,
name varchar(200) not null,
email varchar(200) not null,
password varchar(200) not null,
created_at datetime not null
);
Client
La tabla client sirve para manejar los clientes, es decir, los huéspedes que se hospedan en el hotel y que no necesariamente inician sesión en el sistema.
- id: llave primaria.
- name: el nombre del cliente.
- document: el número de documento de identidad.
- email: correo de contacto, opcional.
- phone: teléfono de contacto, opcional.
create table client (
id int not null auto_increment primary key,
name varchar(200) not null,
document varchar(200) not null,
email varchar(200),
phone varchar(200)
);
Room_type
La tabla room_type maneja los tipos de habitación que existen en el hotel, por ejemplo sencilla, doble o suite, y es aquí donde vive el precio.
- id: llave primaria.
- name: el nombre del tipo de habitación.
- price: el precio por noche de ese tipo.
- image: una imagen del tipo de habitación, opcional.
create table room_type (
id int not null auto_increment primary key,
name varchar(200) not null,
price decimal(10,2) not null,
image varchar(500)
);
Room
La tabla room es la de las habitaciones físicas del hotel, y aquí está el detalle importante: la habitación no guarda su propio precio, sino que lo hereda del tipo de habitación al que pertenece a través de room_type_id.
- id: llave primaria.
- number: el número de la habitación.
- room_type_id: relaciona la habitación con su tipo (y por lo tanto con su precio).
- status: indica si la habitación está disponible, ocupada o en mantenimiento.
create table room (
id int not null auto_increment primary key,
number varchar(200) not null,
room_type_id int not null,
status varchar(200) not null default 'available',
foreign key (room_type_id) references room_type(id)
);
Reservation
La tabla reservation es la tabla principal del sistema, ya que aquí se guardan las reservas de los clientes.
- id: llave primaria.
- check_in: la fecha de entrada.
- check_out: la fecha de salida.
- client_id: el cliente que hace la reserva.
- room_id: la habitación reservada.
- user_id: el usuario del sistema que registró la reserva.
- status: indica si la reserva está confirmada, cancelada o completada.
- created_at: la fecha de creación.
create table reservation (
id int not null auto_increment primary key,
check_in date not null,
check_out date not null,
client_id int not null,
room_id int not null,
user_id int not null,
status varchar(200) not null default 'confirmed',
created_at datetime not null,
foreign key (client_id) references client(id),
foreign key (room_id) references room(id),
foreign key (user_id) references user(id)
);
Payment
La tabla payment guarda los pagos de una reserva, y está pensada para que una misma reserva pueda tener varios pagos, ya sea un pago total o abonos parciales.
- id: llave primaria.
- reservation_id: relaciona el pago con su reserva.
- amount: el monto pagado.
- type: indica si el pago es parcial o total.
- method: el método de pago (efectivo, tarjeta o transferencia).
- created_at: la fecha del pago.
create table payment (
id int not null auto_increment primary key,
reservation_id int not null,
amount decimal(10,2) not null,
type varchar(200) not null,
method varchar(200) not null,
created_at datetime not null,
foreign key (reservation_id) references reservation(id)
);
Descargar
Aqui puedes Descargar sistema-hotelero.sql
Si necesitas un sistema hotelero ya desarrollado aquí les dejo el enlace para ver Hotelion: Sistema de Gestión Hotelera.