Modelo de Base de Datos de Sistema Hotelero

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.

Diagrama de Modelo de Base de Datos de sistema Hotelero
Diagrama de Modelo de Base de Datos de sistema Hotelero

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Evilnapsis

Subscribe now to keep reading and get access to the full archive.

Continue reading