หมวดหมู่: Hospitality Tech

Hotel (series)Hotel (series)

ในโลกของเทคโนโลยีการบริการ (Hospitality Tech) การจัดการข้อมูลห้องพัก การจอง และธุรกรรมของผู้เข้าพักจำนวนมหาศาล ต้องการระบบฐานข้อมูลที่มีความแม่นยำสูงและรองรับความซับซ้อนของข้อมูลเชิงสัมพันธ์ (Relational Data) PostgreSQL คือตัวเลือกที่เหมาะสมที่สุด ด้วยคุณสมบัติ ACID Compliance และความสามารถในการจัดการ JSONB ที่เหนือกว่า ทำให้มันเป็นหัวใจหลักในการสร้างระบบจัดการโรงแรม (Hotel Management System) ที่เสถียรและขยายตัวได้

โครงสร้างฐานข้อมูลหลัก (Schema Design)

หัวใจของการจัดการโรงแรมคือการสร้างตารางที่เชื่อมโยงข้อมูลหลักเข้าด้วยกัน เราต้องกำหนดตารางอย่างน้อยสามตาราง: rooms (ห้องพัก), guests (แขก), และ bookings (การจอง) การใช้ Primary Key และ Foreign Key อย่างถูกต้องคือสิ่งสำคัญที่สุดในการรับประกันความสมบูรณ์ของข้อมูล:

SQL

-- 1. ตารางสำหรับห้องพัก (Rooms) --
CREATE TABLE rooms (
    room_id SERIAL PRIMARY KEY,
    room_number VARCHAR(10) UNIQUE NOT NULL,
    room_type VARCHAR(50) NOT NULL,
    daily_rate NUMERIC(10, 2) NOT NULL
);

-- 2. ตารางสำหรับแขก (Guests) --
CREATE TABLE guests (
    guest_id SERIAL PRIMARY KEY,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE
);

-- 3. ตารางสำหรับรายการจอง (Bookings) --
CREATE TABLE bookings (
    booking_id SERIAL PRIMARY KEY,
    room_id INT REFERENCES rooms(room_id),
    guest_id INT REFERENCES guests(guest_id),
    check_in_date DATE NOT NULL,
    check_out_date DATE NOT NULL,
    total_price NUMERIC(10, 2)
);

การตรวจสอบความพร้อมใช้งาน (Availability Check Query)

ฟังก์ชันที่สำคัญที่สุดคือการตรวจสอบว่าห้องพักหมายเลขใดว่างในช่วงวันที่กำหนด การใช้ JOIN และการกำหนดเงื่อนไขวันที่ (Date Range Overlap) คือหัวใจของการ Query นี้:

SQL

SELECT
    r.room_number,
    r.room_type,
    r.daily_rate
FROM
    rooms r
WHERE
    r.room_id NOT IN (
        SELECT
            room_id
        FROM
            bookings
        WHERE
            -- ตรวจสอบช่วงวันที่ทับซ้อน (Overlap Condition)
            (check_in_date < '2024-12-10' AND check_out_date > '2024-12-05')
    );

การคำนวณรายได้ (Revenue Management Query)

ระบบต้องสามารถคำนวณรายได้รวม (Total Revenue) จากการจองทั้งหมดได้ง่ายๆ โดยการรวม (Aggregate) ข้อมูลจากตาราง bookings:

SQL

SELECT
    COUNT(booking_id) AS total_bookings,
    SUM(total_price) AS total_revenue
FROM
    bookings
WHERE
    check_out_date >= '2024-01-01' AND check_out_date < '2025-01-01';

บทสรุป: ความแข็งแกร่งของ PostgreSQL

การใช้ PostgreSQL ในการจัดการระบบโรงแรมไม่ได้เป็นเพียงแค่การจัดเก็บข้อมูล แต่เป็นการสร้างสถาปัตยกรรมที่เชื่อถือได้ (Reliable Architecture) ด้วยคุณสมบัติ Transactional Integrity และความสามารถในการรองรับข้อมูลที่ซับซ้อนอย่าง JSONB ทำให้ระบบสามารถขยายขีดความสามารถไปสู่การจัดการข้อมูลที่ไม่เป็นโครงสร้าง (เช่น ข้อมูลความชอบของแขก หรือการจองบริการเสริม) ได้อย่างราบรื่น นี่คือรากฐานทางเทคนิคที่แข็งแกร่งสำหรับอุตสาหกรรมการบริการยุคดิจิทัล