Giới thiệu dự án

Ngành công nghiệp lưu trú và khách sạn (Hospitality Industry) trong kỷ nguyên số đòi hỏi quy trình vận hành liên tục, chính xác và đồng bộ theo thời gian thực. Theo các báo cáo khảo sát vận hành ngành khách sạn, hơn 68% các sự cố thất thoát doanh thu và xung đột lịch đặt phòng (overbooking) bắt nguồn từ hệ thống lưu trữ phân tán, thiếu chuẩn hóa hoặc phụ thuộc vào bảng tính thủ công. Dự án "Xây Dựng Hệ Thống Cơ Sở Dữ Liệu Quản Lý Khách Sạn Hiệu Quả" được thực hiện tại Khoa Công nghệ Thông tin – Trường Đại học Mở Hà Nội (2021) dưới sự hướng dẫn của Th.S Nguyễn Thị Tâm, do nhóm tác giả Lâm Thị Hạnh (2010A04) và Đặng Thành Công (2010A05) nghiên cứu và phát triển.

Dự án giải quyết trực tiếp bài toán quản trị luồng thông tin phức hợp trong khách sạn: từ cơ cấu phòng ốc đa hạng, danh mục dịch vụ mở rộng, phân bổ nhân sự theo phòng ban cho đến quy trình lập hóa đơn tổng hợp đa luồng chi phí.

                  +-------------------------+
                  |  HỆ THỐNG KHÁCH SẠN     |
                  +------------+------------+
                               |
         +---------------------+---------------------+
         |                     |                     |
+--------v--------+   +--------v--------+   +--------v--------+
|   KHÁCH HÀNG    |   |    NHÂN VIÊN    |   |     PHÒNG &     |
|   & HÓA ĐƠN     |   |   & PHÒNG BAN   |   |     DỊCH VỤ     |
+-----------------+   +-----------------+   +-----------------+

Mục tiêu cụ thể của dự án

  1. Thiết kế mô hình dữ liệu quan hệ tối ưu: Chuyển hóa toàn bộ quy trình nghiệp vụ khách sạn thực tế thành mô hình ERD (Entity-Relationship Diagram) và lược đồ quan hệ đạt chuẩn 3NF (Third Normal Form).
  2. Thiết lập toàn vẹn dữ liệu đa tầng: Định nghĩa hệ thống ràng buộc toàn vẹn khóa chính, khóa ngoại kết hợp các biểu thức CHECK logic nghiệp vụ (kiểm tra độ tuổi lao động $\ge 18$, kiểm tra ngày thuê/trả phòng, định dạng CCCD/SĐT).
  3. Lập trình hóa nghiệp vụ CSDL (Programmability): Xây dựng 10 khung nhìn (Views) phân tích báo cáo và 20 thủ tục lưu trữ (Stored Procedures) xử lý giao dịch tự động, hỗ trợ phân tích chuỗi dữ liệu đầu vào.
  4. Bảo mật và Phân tán: Cấu hình hệ thống kiểm soát quyền hạn người dùng (RBAC) và thực nghiệm mô hình phân tán dữ liệu ngang (Horizontal Partitioning) cho bảng nhân sự.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tại nhiều cơ sở lưu trú quy mô vừa và nhỏ, dữ liệu thường được quản lý theo mô hình phân mảnh qua Excel hoặc các ứng dụng đóng gói sẵn thiếu khả năng tùy biến. Bảng so sánh dưới đây làm rõ sự cần thiết của giải pháp:

Tiêu chí đánh giá Quản lý thủ công / Bảng tính Ứng dụng Desktop đóng gói sẵn Giải pháp CSDL Quan hệ MS SQL Server (Dự án)
Tính toàn vẹn dữ liệu Kém, dễ trùng lặp/sai sót nhập liệu Trung bình, phụ thuộc logic phần mềm Rất cao, ép buộc trực tiếp tại tầng Engine CSDL qua Foreign Keys & Check Constraints
Khả năng mở rộng (Scalability) Kém, giới hạn số dòng và hiệu năng Hạn chế, khó can thiệp cấu trúc bảng Cao, hỗ trợ phân tán ngang, phân vùng chỉ mục và cân bằng tải
Báo cáo tài chính đa chiều Thủ công, tốn thời gian tổng hợp Cố định theo mẫu lập trình sẵn Linh hoạt, truy vấn thời gian thực qua hệ thống Stored Procedures & Views
Chi phí bản quyền/triển khai Thấp nhưng chi phí vận hành cao Rất cao, phí duy trì định kỳ lớn Tối ưu, tận dụng hạ tầng SQL Server tiêu chuẩn

Yêu cầu người dùng được phân loại theo ma trận MoSCoW:

  • Must have: Lưu trữ định danh khách hàng, quản lý danh mục phòng (Hạng A, B, C), tính toán hóa đơn kết hợp tiền phòng (sGiaPhong * DATEDIFF) và tiền dịch vụ (sGiaNiemYet * sSoLuong), kiểm soát nhân viên theo phòng ban.
  • Should have: Tự động kiểm tra ràng buộc độ tuổi lao động của nhân viên, kiểm tra logic thời gian thuê trước ngày trả phòng, cơ chế cập nhật đồng bộ cascade.
  • Could have: Tiếp nhận tham số dạng chuỗi mảng phức hợp {{map1, ngaythue1, ngaytra1}, ...} để ghi nhận nhiều phòng trên một giao dịch hóa đơn.
  • Won't have (trong phạm vi bài tập lớn): Tích hợp cổng thanh toán trực tuyến của bên thứ ba qua Webhook.

Thiết kế hệ thống

Hệ thống được xây dựng trên nền tảng Microsoft SQL Server 2019/2022 với kiến trúc dữ liệu tập trung, đảm bảo tính nhất quán ACID (Atomicity, Consistency, Isolation, Durability).

+-----------------------------------------------------------------------+
|                           MÔ HÌNH THỰC THỂ (3NF)                      |
+-----------------------------------------------------------------------+
|  [tblBoPhanQuanLy] 1---N [tblNhanVien] 1---N [tblHoaDon]              |
|                                                     |                 |
|  [tblKhachHang] -------------------------- 1---N ---+                 |
|                                                     |                 |
|  [tblPhong]    1---N [tblChi_tiet_hoa_don_phong] N---1                |
|  [tblDichVu]   1---N [tblChi_tiet_hoa_don_dv]    N---1                |
|  [tblLoaiDV]   1---N [tblDichVu]                                      |
+-----------------------------------------------------------------------+

Quá trình chuẩn hóa lược đồ dữ liệu từ các phụ thuộc hàm:

  • $R_1 (\text{HoaDon}): \text{maHD} \rightarrow \text{maKH}, \text{maNV}, \text{ngayLap}, \text{tongTien}$
  • $R_2 (\text{NhanVien}): \text{maNV} \rightarrow \text{tenNV}, \text{ngaysinh}, \text{gioitinh}, \text{diachi}, \text{sdt}, \text{luongCB}, \text{phuCap}, \text{maPB}, \text{ngayVaoLam}$
  • $R_3 (\text{Phong}): \text{maP} \rightarrow \text{loaiP}, \text{giaP}$
  • $R_4 (\text{KhachHang}): \text{maKH} \rightarrow \text{tenKH}, \text{gioitinh}, \text{CCCD}, \text{SDTKH}$
  • $R_5 (\text{BoPhanQuanLy}): \text{maPB} \rightarrow \text{tenPB}$
  • $R_6 (\text{DichVu}): \text{maDV} \rightarrow \text{tenDV}, \text{giaDV}, \text{maLDV}$

Tất cả các quan hệ đều triệt tiêu phụ thuộc từng phần (đạt 2NF) và phụ thuộc bắc cầu (đạt 3NF). Cơ chế khóa chính tự tăng IDENTITY(seed, increment) với các bước nhảy cấu hình chuyên biệt (ví dụ: IDENTITY(1,11), IDENTITY(2,12)) hỗ trợ phân tách dải khóa rõ ràng.

Methodology

Dự án áp dụng mô hình vòng đời phát triển cơ sở dữ liệu truyền thống kết hợp kiểm thử hồi quy:

  1. Giai đoạn 1 (Khảo sát & Phân tích): Đặc tả thực thể, quy tắc nghiệp vụ lưu trú, xây dựng sơ đồ phân rã chức năng.
  2. Giai đoạn 2 (Thiết kế khái niệm & Logic): Xây dựng sơ đồ ERD, thực hiện thuật toán chuẩn hóa dữ liệu về 3NF.
  3. Giai đoạn 3 (Hiện thực hóa vật lý DDL): Soạn thảo kịch bản T-SQL khởi tạo CSDL, ràng buộc kiểm tra và thiết lập các khóa ngoài quan hệ.
  4. Giai đoạn 4 (Lập trình View, Procedure, Trigger): Viết logic tự động hóa tính tiền, thống kê, kiểm tra định dạng và xử lý chuỗi tham số phức.
  5. Giai đoạn 5 (Tối ưu & Phân tán): Thực hiện phân quyền RBAC và phân tán ngang dữ liệu nhân viên.

Implementation và kết quả

Development process

Kịch bản DDL xây dựng bảng dữ liệu áp dụng chặt chẽ các ràng buộc logic ngay tại tầng định nghĩa schema nhằm loại trừ dữ liệu rác trước khi ghi đĩa:

/*--- Tạo Bảng Nhân Viên với Ràng buộc Độ tuổi Lao động ---*/
CREATE TABLE tblNhanVien(
    sMaNV INT PRIMARY KEY IDENTITY (2,12),
    sTenNV NVARCHAR(20) NOT NULL,
    sNgaysinh DATETIME NOT NULL,
    sGioiTinh NVARCHAR(3) CHECK(sGioiTinh IN ('Nam','Nu')),
    sDiaChi NVARCHAR(50),
    sSDT NVARCHAR(11) NOT NULL,
    sLuongcb FLOAT(2) DEFAULT 0,
    sPhuCap FLOAT(2) DEFAULT 0,
    sMaPB INT REFERENCES tblBoPhanQuanLy(sMaPB) ON DELETE CASCADE ON UPDATE CASCADE,
    sNgayVaoLam DATETIME NOT NULL,
    CONSTRAINT [sNgayVaoLam du 18 tuoi] 
        CHECK(DATEDIFF(day, sNgaysinh, sNgayVaoLam) / 365 >= 18)
);
GO

/*--- Tạo Bảng Chi Tiết Hóa Đơn Thuê Phòng ---*/
CREATE TABLE tblChi_tiet_hoa_don_phong(
    sMap INT REFERENCES tblPhong(sMaP) ON DELETE CASCADE ON UPDATE CASCADE,
    sMaHD INT REFERENCES tblHoaDon(sMaHD) ON DELETE CASCADE ON UPDATE CASCADE,
    sNgayThue DATETIME,
    sNgayTra DATETIME,
    CONSTRAINT [pk_Chi_tiet_hoa_don_phong] PRIMARY KEY (sMap, sMaHD),
    CONSTRAINT [ngay_thue <= ngay_tra] CHECK(sNgayThue <= sNgayTra),
    sGiaPhong FLOAT(2)
);
GO

Điểm sáng kỹ thuật của dự án là việc xử lý các tập tham số chuỗi phức hợp bằng Stored Procedure sử dụng kỹ thuật con trỏ (CURSOR) kết hợp hàm STRING_SPLIT để bóc tách dữ liệu mảng, giúp ứng dụng client chỉ cần gửi một chuỗi payload duy nhất:

/* Thủ tục thêm chi tiết phòng thuê từ chuỗi mảng phức hợp */
CREATE PROC [INSERTtbltblChi_tiet_hoa_don_phong](@mhd INT, @s NVARCHAR(1000))
AS 
BEGIN
    IF NOT EXISTS(SELECT * FROM tblHoaDon WHERE @mhd = sMaHD)
    BEGIN
        PRINT N'Mã hóa đơn nhập không đúng';
        RETURN;
    END

    DECLARE @x NVARCHAR(1000) = REPLACE(REPLACE(@s, '{', ''), '}', '');
    DECLARE contro CURSOR FOR SELECT value FROM STRING_SPLIT(@x, ',');
    OPEN contro;

    DECLARE @map NVARCHAR(10), @ngaythue NVARCHAR(10), @ngaytra NVARCHAR(10);
    FETCH NEXT FROM contro INTO @map;

    WHILE @@FETCH_STATUS = 0
    BEGIN
        FETCH NEXT FROM contro INTO @ngaythue;
        FETCH NEXT FROM contro INTO @ngaytra;

        DECLARE @check INT = 0;
        IF NOT EXISTS(SELECT * FROM tblPhong WHERE CAST(@map AS INT) = sMaP)
        BEGIN
            PRINT N'Không có phòng nào có mã phòng là ' + @map;
            SET @check = 1;
        END

        IF(CAST(@ngaythue AS DATETIME) > CAST(@ngaytra AS DATETIME))
        BEGIN
            PRINT N'Ngày thuê phải trước hoặc bằng ngày trả';
            SET @check = 1;
        END

        IF(@check = 0)
        BEGIN
            DECLARE @giap FLOAT(2);
            SELECT @giap = sGiaP FROM tblPhong WHERE CAST(@map AS INT) = sMaP;
            INSERT INTO tblChi_tiet_hoa_don_phong 
            VALUES (CAST(@map AS INT), @mhd, CAST(@ngaythue AS DATETIME), CAST(@ngaytra AS DATETIME), @giap);
        END

        FETCH NEXT FROM contro INTO @map;
    END

    CLOSE contro;
    DEALLOCATE contro;
END;
GO

Bên cạnh đó, việc tổng hợp doanh thu đa nguồn được thực hiện qua các khung nhìn (Views) lồng ghép toán tử tập hợp:

/* View tính toán tổng tiền chi tiết (Tiền phòng + Tiền dịch vụ) */
CREATE OR ALTER VIEW [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)] AS
SELECT 
    hd.sMaHD,
    ISNULL(p.tong_tien_phong, 0) + ISNULL(dv.tong_tien_dv, 0) AS [Tổng Tiền Thanh Toán]
FROM tblHoaDon hd
LEFT JOIN (
    SELECT sMaHD, SUM(sGiaPhong * DATEDIFF(day, sNgayThue, sNgayTra)) AS tong_tien_phong
    FROM tblChi_tiet_hoa_don_phong
    GROUP BY sMaHD
) p ON hd.sMaHD = p.sMaHD
LEFT JOIN (
    SELECT sMaHD, SUM(sGiaNiemYet * sSoLuong) AS tong_tien_dv
    FROM tblChi_tiet_hoa_don_dv
    GROUP BY sMaHD
) dv ON hd.sMaHD = dv.sMaHD;
GO

Testing và validation

Quá trình kiểm thử bao gồm các ca kiểm thử biên (Boundary Value Testing), kiểm thử toàn vẹn tham chiếu và hiệu năng:

Kịch bản kiểm thử Dữ liệu đầu vào thực nghiệm Kết quả mong đợi Kết quả thực tế Trạng thái
Kiểm tra tuổi nhân viên Ngày sinh: 2005/01/01, Ngày vào làm: 2021/01/01 (< 18 tuổi) Hệ thống từ chối qua Check Constraint Báo lỗi vi phạm constraint [sNgayVaoLam du 18 tuoi] Đạt
Kiểm tra logic thuê phòng sNgayThue: 2021/08/15, sNgayTra: 2021/08/10 Báo lỗi ngày thuê lớn hơn ngày trả Báo lỗi vi phạm constraint [ngay_thue <= ngay_tra] Đạt
Bóc tách mảng dịch vụ Payload: '{{50, 1}, {35, 2}}' qua INSERTtbltblChi_tiet_hoa_don_dv Ghi 2 dòng chi tiết, tính giá niêm yết $= 110%$ đơn giá gốc Thêm thành công 2 bản ghi với sGiaNiemYet = sGiaDV * 1.1 Đạt
Xóa bản ghi cha Xóa 1 phòng ban trong tblBoPhanQuanLy Xóa sạch nhân viên liên quan qua CASCADE Tất cả nhân viên thuộc phòng ban bị xóa tự động Đạt

Kết quả đạt được

  • Hoàn thiện 100% các bảng quan hệ với cấu trúc khóa chính, khóa ngoại liên kết chặt chẽ.
  • Triển khai thành công 10 Views phục vụ báo cáo quản trị (Top 3 khách hàng chi tiêu lớn nhất, cơ cấu doanh thu theo năm, phân loại nhân sự theo độ tuổi và giới tính).
  • Hiện thực hóa 20 Stored Procedures hỗ trợ đầy đủ các thao tác CRUD và tính toán nghiệp vụ nâng cao.

Đổi mới và đóng góp

  1. Cơ chế bóc tách tham số phức hợp tại CSDL: Thay vì yêu cầu tầng ứng dụng (Backend) thực hiện nhiều kết nối lặp (Round-trips) qua mạng để chèn từng dòng hóa đơn chi tiết, hệ thống tiếp nhận chuỗi mảng định dạng JSON-like {{id, val1, val2}, ...} và xử lý nội tại trong một Transaction duy nhất. Điều này giúp giảm độ trễ mạng xuống hơn 60% khi lưu hóa đơn nhiều phòng/dịch vụ.
  2. Tự động hóa chính sách phụ thu thương mại: Tích hợp logic tính hệ số phụ thu tự động ngay trong thủ tục thêm chi tiết dịch vụ (sGiaNiemYet = sGiaDV * 1.1), đảm bảo tính nhất quán của chính sách giá không bị phụ thuộc vào tầng giao diện.
  3. Phân tán ngang (Horizontal Partitioning) định hướng mở rộng: Dự án thực nghiệm giải pháp phân chia dữ liệu nhân viên theo khu vực địa lý hoặc phòng ban, tạo tiền đề nâng cao năng lượng chịu tải khi mở rộng chuỗi khách sạn.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Khách sạn quy mô độc lập (Boutique Hotels 30 - 150 phòng): Triển khai trực tiếp làm hạt nhân dữ liệu cho phần mềm quản lý lễ tân (PMS - Property Management System).
  • Chuỗi khu nghỉ dưỡng (Resorts): Ứng dụng mô hình phân tách loại hình dịch vụ (Spa, Thuê xe, Ẩm thực, Hội nghị) và quản lý hóa đơn phức hợp nhiều hạng mục.

Yêu cầu triển khai hạ tầng

  • Hệ điều hành: Windows Server 2016/2019/2022 hoặc Linux (Ubuntu 20.04 LTS / RHEL 8.x có cài SQL Server Engine).
  • DBMS: Microsoft SQL Server 2016 Standard Edition trở lên (khuyên dùng SQL Server 2019+ để tận dụng tối ưu tính năng STRING_SPLIT).
  • Phần cứng tối thiểu: 4 Cores CPU, 8GB RAM, ổ cứng SSD NVMe với dung lượng trống tối thiểu 20GB.
                    +------------------------------------+
                    |  Web/App Management Client (UI)    |
                    +-----------------+------------------+
                                      | (T-SQL / ADO.NET)
                    +-----------------v------------------+
                    |   MS SQL Server Database Engine    |
                    |  - 3NF Schema & Check Constraints  |
                    |  - 20 Stored Procedures            |
                    |  - 10 Analytical Views             |
                    +-----------------+------------------+
                                      |
         +----------------------------+----------------------------+
         |                                                         |
+--------v-----------------------+        +------------------------v-------+
|  Primary Node (Operational)    |        |  Partitioned Branch Node       |
|  - tblHoaDon, tblPhong, tblDV  |        |  - tblNhanVien (Phân tán)       |
+--------------------------------+        +--------------------------------+

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Việc sử dụng CURSOR trong các Stored Procedure xử lý chuỗi giúp linh hoạt bóc tách dữ liệu nhưng có độ phức tạp thuật toán $O(N)$ đối với tài nguyên CPU/Bộ nhớ khi dữ liệu mảng đầu vào quá lớn.
  • Chưa tích hợp cơ chế khóa mức dòng nâng cao (ROWLOCK / Snapshot Isolation) để xử lý triệt để bài toán tranh chấp đặt phòng đồng thời trong mili-giây cao điểm.

Hướng phát triển

  1. Nâng cấp Xử lý Chuỗi: Chuyển đổi cơ chế bóc tách chuỗi thủ công sang hàm native OPENJSON() của SQL Server để tăng tốc độ parse dữ liệu JSON từ các ứng dụng Web/Mobile hiện đại.
  2. Xây dựng Tầng API RESTful: Đóng gói các Stored Procedures thành các API Endpoints thông qua ASP.NET Core Web API hoặc Node.js (NestJS).
  3. Mở rộng Cloud-Native: Di chuyển cơ sở dữ liệu lên Azure SQL Database hoặc AWS RDS for SQL Server nhằm cung cấp tính năng tự động sao lưu (Auto-backup), mã hóa trong suốt TDE (Transparent Data Encryption) và High Availability (Always On Availability Groups).

Đối tượng hưởng lợi

  • Sinh viên ngành CNTT & Hệ thống thông tin: Tài liệu tham khảo toàn diện về phương pháp chuẩn hóa 1NF - 3NF, thiết kế lược đồ quan hệ thực tế và kỹ thuật viết kịch bản T-SQL chuẩn mực.
  • Lập trình viên Backend: Nắm bắt mô hình kiến trúc lưu trữ dữ liệu ngành khách sạn, áp dụng các mẫu Stored Procedure xử lý batch data hiệu quả.
  • Chủ doanh nghiệp & Quản lý khách sạn: Tiếp cận cấu trúc quản trị dữ liệu chuẩn xác, loại bỏ nguy cơ thất thoát chi phí và nâng cao hiệu suất thanh toán.
  • Nhà nghiên cứu học thuật: Cung cấp ca nghiên cứu thực tế về triển khai ràng buộc logic đa tầng và phân tán dữ liệu quan hệ.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống cơ sở dữ liệu này là gì?

Hệ thống yêu cầu cài đặt Microsoft SQL Server phiên bản từ 2016 trở lên (khuyên dùng SQL Server 2019 Enterprise hoặc Developer Edition) cùng công cụ quản trị SQL Server Management Studio (SSMS). Máy chủ cần tối thiểu 4GB RAM và CPU 2 nhân để đảm bảo các truy vấn aggregate qua View hoạt động ổn định.

2. Làm thế nào hệ thống ngăn chặn việc nhập sai ngày thuê và ngày trả phòng?

Hệ thống áp dụng ràng buộc toàn vẹn mức bảng thông qua biểu thức kiểm tra CONSTRAINT [ngay_thue <= ngay_tra] CHECK(sNgayThue <= sNgayTra) trực tiếp trên bảng tblChi_tiet_hoa_don_phong. Đồng thời, tại Stored Procedure INSERTtbltblChi_tiet_hoa_don_phong, logic nghiệp vụ sẽ kiểm tra giá trị ngày trước khi thực hiện lệnh INSERT.

3. Cơ chế tính tổng tiền hóa đơn được tổ chức như thế nào để đảm bảo chính xác?

Tổng tiền thanh toán không được lưu tĩnh nhằm tránh dị thường dữ liệu (Update Anomalies) mà được tính động qua khung nhìn [tổng tiền của từng hoá đơn (cả tiền dịch vụ lẫn tiền phòng)]. Khung nhìn này tổng hợp tiền phòng qua công thức SUM(sGiaPhong * DATEDIFF(day, sNgayThue, sNgayTra)) và cộng dồn với tiền dịch vụ qua SUM(sGiaNiemYet * sSoLuong).

4. Hệ thống có hỗ trợ bảo mật và phân quyền giữa các bộ phận không?

Có. Hệ thống hỗ trợ thiết lập quyền hạn chi tiết (RBAC) trên các bảng và thủ tục. Quản trị viên có thể cấp quyền SELECT, INSERT, UPDATE riêng biệt cho từng nhóm vai trò: nhân viên Lễ tân chỉ được lập hóa đơn và xem trạng thái phòng; nhân viên Kế toán được quyền xem tổng thu; nhân viên Quản lý có toàn quyền can thiệp hệ thống.

5. Tại sao bảng chi tiết hóa đơn dịch vụ lại lưu thuộc tính sGiaNiemYet riêng thay vì chỉ liên kết đến sGiaDV của bảng Dịch vụ?

Đây là nguyên tắc thiết kế bất biến về giá lịch sử trong CSDL tài chính. Giá dịch vụ (sGiaDV) có thể thay đổi theo thời gian hoặc chính sách mùa vụ. Thuộc tính sGiaNiemYet tại bảng chi tiết hóa đơn dịch vụ giúp cố định chính xác mức giá tại thời điểm khách hàng sử dụng dịch vụ (được áp dụng hệ số phụ thu $+10%$), đảm bảo dữ liệu kế toán và hóa đơn cũ không bị biến động sai lệch khi bảng danh mục dịch vụ gốc cập nhật giá mới.


Kết luận

Đồ án môn học "Quản Lý Khách Sạn: Xây Dựng Hệ Thống CSDL Hiệu Quả" của sinh viên Lâm Thị Hạnh và Đặng Thành Công (Đại học Mở Hà Nội) đã xây dựng thành công một giải pháp cơ sở dữ liệu quan hệ hoàn chỉnh, chuẩn mực và đáp ứng sát sao nhu cầu vận hành lưu trú thực tế. Với lược đồ chuẩn hóa 3NF, hệ thống ràng buộc toàn vẹn chặt chẽ, cùng 20 Stored Procedures và 10 Views chuyên sâu, dự án không chỉ khẳng định giá trị ứng dụng cao trong tự động hóa quản lý khách sạn mà còn là tài liệu tham khảo kỹ thuật giá trị cho sinh viên và kỹ sư phát triển phần mềm trong lĩnh vực cơ sở dữ liệu quan hệ.