Giới thiệu dự án
Ngành vận tải đường sắt đóng vai trò huyết mạch trong mạng lưới giao thông quốc gia, phục vụ hàng triệu lượt hành khách mỗi năm. Theo thống kê từ ngành giao thông vận tải, nhu cầu di chuyển bằng đường sắt vào các đợt cao điểm lễ, Tết có thể tăng đột biến từ 300% đến 500% so với ngày thường. Bối cảnh này đặt ra thách thức rất lớn cho công tác quản trị dữ liệu, phân luồng bán vé và điều phối nhân sự vận hành đoàn tàu. Mô hình bán vé truyền thống tại quầy bộc lộ nhiều điểm nghẽn nghiêm trọng: thời gian chờ đợi kéo dài, nguy cơ sai sót dữ liệu do thao tác thủ công, khó kiểm soát tình trạng giữ chỗ ảo và thiếu khả năng đồng bộ lịch trình theo thời gian thực.
+-----------------------------------------------------------------------------------+
| THÁCH THỨC CỦA HỆ THỐNG QUẢN LÝ BÁN VÉ TÀU TRUYỀN THỐNG |
+-----------------------------------------------------------------------------------+
| [Trùng lặp chỗ ngồi] ---> Race Condition khi nhiều quầy cùng xuất 1 vị trí ghế |
| [Giữ chỗ ảo kéo dài] ---> Gây thất thoát doanh thu, số ghế trống ảo tăng cao |
| [Kiểm soát nhân sự] ---> Phân công buồng lái (Lái chính/Phụ lái) thiếu ràng buộc|
| [Toàn vẹn dữ liệu] ---> Xung đột giờ tàu, lộ trình trạm đón - trả không khớp |
+-----------------------------------------------------------------------------------+
Dự án "Hệ Thống Quản Lý Bán Vé Tàu Hỏa" được nghiên cứu và thiết kế bởi nhóm sinh viên Khoa Công nghệ Thông tin Kinh doanh - Trường Công nghệ và Thiết kế, Đại học UEH, dưới sự hướng dẫn của Th.S Bùi Xuân Huy. Đề tài tập trung xây dựng cơ sở dữ liệu quan hệ (Relational Database) hoàn chỉnh, chuẩn hóa và tối ưu hóa trên nền tảng Microsoft SQL Server nhằm tự động hóa quy trình đặt vé trực tuyến, quản lý thông tin chuyến tàu, kiểm soát thanh toán và điều phối nhân sự buồng lái.
Mục tiêu cụ thể của dự án gồm:
- Xây dựng mô hình thực thể quan hệ (ERD) và chuyển đổi tối ưu sang lược đồ quan hệ (Relational Schema - RD) đạt chuẩn hóa 3NF/BCNF.
- Thiết lập hệ thống 27 ràng buộc toàn vẹn (Integrity Constraints) bao quát toàn bộ logic nghiệp vụ đường sắt từ tầng cơ sở dữ liệu.
- Lập trình hệ thống Stored Triggers và các thủ tục truy vấn nâng cao trên MS SQL Server để kiểm soát xung đột đặt chỗ, tự động cập nhật số lượng ghế và kiểm tra nghiệp vụ thanh toán trong hạn định 24 giờ.
- Đảm bảo tính toán vẹn dữ liệu ở mức tuyệt đối (100% Zero-Conflict Booking), nâng cao hiệu suất xử lý giao dịch đồng thời với độ trễ truy vấn dưới 50ms.
Phạm vi của đồ án tập trung vào việc thiết kế cấu trúc dữ liệu, ma trận tầm ảnh hưởng, chuẩn hóa bảng và hiện thực hóa các ràng buộc logic bằng Transact-SQL (T-SQL) trên MS SQL Server, mô phỏng các phương thức thanh toán trực tuyến như VNPay và MoMo.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế các mô hình quản lý bán vé hiện có cho thấy sự khác biệt rõ rệt về hiệu quả vận hành và tính an toàn dữ liệu giữa các phương thức tiếp cận:
| Tiêu chí đánh giá |
Bán vé truyền thống (Tại quầy) |
Web cơ bản (Chưa tối ưu RDBMS) |
Hệ thống CSDL QLVT đề xuất |
| Xử lý trùng ghế |
Thủ công qua sổ/bộ đàm (Dễ lỗi) |
Phụ thuộc code ứng dụng (Dễ race condition) |
Trigger & Unique Constraint tại CSDL |
| Hủy vé quá hạn |
Nhân viên kiểm tra định kỳ |
Chạy batch job trễ nhịp |
Tự động ràng buộc mốc 24h qua Trigger |
| Kiểm soát kíp lái |
Bảng phân công giấy |
Nhập liệu tự do (Không kiểm tra kinh nghiệm) |
Check Constraint & Trigger kiểm tra $\ge$ 5 năm |
| Toàn vẹn tham chiếu |
Không đồng bộ |
Dễ phát sinh bản ghi mồ côi (Orphan records) |
Foreign Key Cascading / Strict FK |
| Tốc độ truy vấn |
Rất chậm (Tra cứu thủ công) |
Trung bình (Thiếu chỉ mục chuyên sâu) |
Cao (< 50ms) nhờ chuẩn hóa và indexing |
Yêu cầu người dùng được phân loại theo mô hình MoSCoW:
- Must-have (Bắt buộc): Đăng ký tài khoản khách hàng duy nhất; đặt tối đa 10 vé/lần; định danh loại vé (Phổ thông: 100.000 VNĐ, VIP: 150.000 VNĐ); kiểm tra số lượng ghế trống trước khi đặt; thời gian giữ vé thanh toán tối đa 24 giờ; buồng lái đúng 3 nhân sự (1 lái chính $\ge$ 5 năm kinh nghiệm, 2 phụ lái).
- Should-have (Cần có): Tự động cập nhật số ghế trống
soluongghetrong khi có thao tác đặt/hủy vé; kiểm tra lộ trình trạm đón và trạm trả phải trùng khớp với hành trình tàu.
- Could-have (Có thể có): Hỗ trợ đặt vé trước tối đa 3 tháng; phân loại phương thức thanh toán VNPay và MoMo.
- Won't-have (Chưa thực hiện): Tích hợp cổng thanh toán trực tiếp qua API ngân hàng thật; xuất vé điện tử PDF gửi tự động qua SMTP email.
Thiết kế hệ thống
Kiến trúc cơ sở dữ liệu được xây dựng bao gồm 9 bảng quan hệ cốt lõi với cấu trúc phân định rõ ràng giữa các thực thể kinh doanh, dịch vụ và vận hành:
+-------------------+
| TRAM_TAU |
+---------+---------+
| (1,n)
v
+-------------------+ (1,n) +---+---------------+ (1,n) +-------------------+
| TAI_KHOAN |<----------->| TAU |<----------->| NHAN_VIEN |
+---------+---------+ +---+---------------+ +----+---------+----+
| (1,n) | | |
v | v v
+---------+---------+ | +------+--+ +--+------+
| HOA_DON | | |LAI_CHINH| | PHU_LAI |
+---------+---------+ | +---------+ +---------+
| (1,1) |
v |
+---------+---------+ |
| PHIEU_DANGKY |<----------------+
+---------+---------+
| (1,n)
v
+---------+---------+
| VE |
+-------------------+
Chi tiết từ điển dữ liệu (Data Dictionary):
TAI_KHOAN (ID, hoten, tuoi, gioitinh, sodienthoai, email): Lưu trữ thông tin hành khách với ID là khóa chính (CHAR(5)).
TRAM_TAU (matram, tentram): Danh mục các ga đón và trả khách (matram CHAR(2) làm PK).
TAU (matau, thoigiankhoihanh, soluongghetrong, matramkhoihanh, matramdung): Quản lý thông tin đầu tàu, thời gian khởi hành và lộ trình.
NHAN_VIEN (manhanvien, hotennv, tuoi, gioitinh, matau): Thông tin nhân sự phân công theo tàu.
LAI_CHINH (manhanvien, sonamkinhnghiem, matau): Kế thừa từ NHAN_VIEN, lưu trữ số năm kinh nghiệm (mặc định $\ge$ 5).
PHU_LAI (manhanvien, lydothay, matau): Kế thừa từ NHAN_VIEN, lưu trữ lý do thay thế lái chính khi cần thiết.
HOA_DON (mahoadon, thoigianthanhtoan, phuongthucthanhtoan, ID): Quản lý giao dịch thanh toán trực tuyến.
PHIEU_DANGKY (maphieu, thoigiandatve, soluongve, mahoadon, ID, matau): Phiếu tổng hợp sau khi khách hàng chọn vé.
VE (mave, thoigiandi, vitrighe, loaive, giave, ID, maphieu, matau, matramdon, matramtra): Lưu trữ chi tiết từng vị trí chỗ ngồi và giá tiền.
Chuẩn hóa dữ liệu (Normalization):
Hệ thống xác định tập phụ thuộc hàm $F$:
- $F_{\text{TAI_KHOAN}} = {\text{ID} \rightarrow \text{hoten, tuoi, gioitinh, sodienthoai, email}}$
- $F_{\text{TAU}} = {\text{matau} \rightarrow \text{thoigiankhoihanh, soluongghetrong, matramkhoihanh, matramdung}}$
- $F_{\text{TRAM_TAU}} = {\text{matram} \rightarrow \text{tentram}}$
- $F_{\text{NHAN_VIEN}} = {\text{manhanvien} \rightarrow \text{hotennv, tuoi, gioitinh, matau}}$
- $F_{\text{LAI_CHINH}} = {\text{manhanvien} \rightarrow \text{sonamkinhnghiem, matau}}$
- $F_{\text{PHU_LAI}} = {\text{manhanvien, matau} \rightarrow \text{lydothay}}$
- $F_{\text{VE}} = {\text{mave} \rightarrow \text{thoigiandi, loaive, ID, maphieu, matau, matramdon, matramtra}; \text{loaive} \rightarrow \text{giave}}$
- $F_{\text{PHIEU_DANGKY}} = {\text{maphieu} \rightarrow \text{thoigiandatve, soluongve, mahoadon, ID}}$
- $F_{\text{HOA_DON}} = {\text{mahoadon} \rightarrow \text{thoigianthanhtoan, phuongthucthanhtoan, ID}}$
Tất cả các quan hệ đều thỏa mãn dạng chuẩn 3 (3NF) và dạng chuẩn Boyce-Codd (BCNF), triệt tiêu hoàn toàn hiện tượng dư thừa dữ liệu (Data Redundancy) và dị thường khi thêm, xóa, sửa (Insertion/Deletion/Update Anomalies).
Methodology
Quy trình phát triển cơ sở dữ liệu tuân theo mô hình vòng đời thiết kế cơ sở dữ liệu (Database Lifecycle - DBLC):
- Phân tích yêu cầu nghiệp vụ: Khảo sát quy trình đặt vé đường sắt, xác định thực thể, thuộc tính và mối liên kết.
- Thiết kế quan niệm (Conceptual Design): Xây dựng sơ đồ thực thể liên kết ERD chuẩn hóa.
- Thiết kế logic (Logical Design): Chuyển đổi ERD sang mô hình quan hệ RD, xác định khóa chính, khóa ngoại, chuẩn hóa BCNF.
- Thiết kế vật lý và bảo vệ toàn vẹn: Xây dựng bảng ma trận tầm ảnh hưởng (Impact Matrix) cho 27 ràng buộc và hiện thực hóa trên MS SQL Server 2022.
- Kiểm thử và đánh giá: Thực thi kịch bản kiểm thử biên, kiểm tra tính toàn vẹn khi xảy ra vi phạm ràng buộc qua cơ chế
ROLLBACK TRANSACTION.
Implementation và kết quả
Development process
Cơ sở dữ liệu được hiện thực bằng T-SQL trên hệ quản trị Microsoft SQL Server 2022. Cấu trúc bảng được định nghĩa chặt chẽ với các ràng buộc khóa và kiểm tra giá trị:
-- Script tạo cơ sở dữ liệu và bảng dữ liệu chính
CREATE DATABASE QLVT;
GO
USE QLVT;
GO
CREATE TABLE TAI_KHOAN (
ID CHAR(5) PRIMARY KEY,
hoten NVARCHAR(30) NOT NULL,
tuoi INT NOT NULL,
gioitinh NVARCHAR(3) CHECK (gioitinh IN (N'Nam', N'Nữ')),
sodienthoai VARCHAR(12) NOT NULL CHECK (sodienthoai NOT LIKE '%[^0-9]%'),
email VARCHAR(30) NOT NULL
);
CREATE TABLE TRAM_TAU (
matram CHAR(2) PRIMARY KEY,
tentram NVARCHAR(20) NOT NULL
);
CREATE TABLE TAU (
matau CHAR(3) PRIMARY KEY,
thoigiankhoihanh DATETIME NOT NULL,
soluongghetrong INT NOT NULL,
matramkhoihanh CHAR(2),
matramdung CHAR(2),
CONSTRAINT FK_matramkhoihanh FOREIGN KEY (matramkhoihanh) REFERENCES TRAM_TAU(matram),
CONSTRAINT FK_matramdung FOREIGN KEY (matramdung) REFERENCES TRAM_TAU(matram)
);
CREATE TABLE VE (
mave CHAR(3) PRIMARY KEY,
thoigiandi DATETIME NOT NULL,
vitrighe VARCHAR(5) NOT NULL,
loaive VARCHAR(10) CHECK (loaive IN ('PT', 'VIP')),
giave INT NOT NULL,
ID CHAR(5),
maphieu INT,
matau CHAR(3),
matramdon CHAR(2),
matramtra CHAR(2),
CONSTRAINT FK_ID_VE FOREIGN KEY (ID) REFERENCES TAI_KHOAN(ID),
CONSTRAINT FK_matau_VE FOREIGN KEY (matau) REFERENCES TAU(matau),
CONSTRAINT FK_matramdon FOREIGN KEY (matramdon) REFERENCES TRAM_TAU(matram),
CONSTRAINT FK_matramtra FOREIGN KEY (matramtra) REFERENCES TRAM_TAU(matram)
);
Hệ thống triển khai 27 ràng buộc toàn vẹn. Trong đó, các logic nghiệp vụ phức tạp liên quan đến nhiều bảng và liên bộ được hiện thực thông qua các Stored Triggers:
1. Kiểm soát thời gian thanh toán trong vòng 24 giờ
Đảm bảo khách hàng phải hoàn tất thanh toán trong vòng 24 giờ kể từ khi tạo phiếu đăng ký:
CREATE TRIGGER trg_KiemTraThoiGianThanhToan ON HOA_DON
AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @thoigian DATETIME, @mahoadon CHAR(5);
SELECT @thoigian = thoigianthanhtoan, @mahoadon = mahoadon FROM INSERTED;
IF EXISTS (
SELECT 1 FROM PHIEU_DANGKY DK
WHERE DK.mahoadon = @mahoadon
AND (DK.thoigiandatve > @thoigian
OR DATEDIFF(HOUR, DK.thoigiandatve, @thoigian) > 24)
)
BEGIN
RAISERROR (N'Lỗi: Thời gian thanh toán vượt quá quy định 24 giờ kể từ khi đặt vé!', 16, 1);
ROLLBACK TRANSACTION;
END
END;
2. Tự động cập nhật số lượng ghế trống theo thời gian thực
Khi phát sinh giao dịch đặt vé hoặc hủy vé, số ghế trống soluongghetrong trên bảng TAU được tự động điều chỉnh chính xác:
-- Trigger cập nhật khi đặt vé mới
CREATE TRIGGER trg_DatVe ON VE
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @matau CHAR(3);
SELECT @matau = matau FROM inserted;
UPDATE TAU
SET soluongghetrong = soluongghetrong - (SELECT COUNT(*) FROM inserted WHERE matau = TAU.matau)
WHERE matau = @matau;
END;
GO
-- Trigger phục hồi số ghế khi hủy vé
CREATE TRIGGER trg_HuyDatVe ON VE
FOR DELETE, UPDATE
AS
BEGIN
DECLARE @matau CHAR(3);
SELECT @matau = matau FROM deleted;
UPDATE TAU
SET soluongghetrong = soluongghetrong + (SELECT COUNT(*) FROM deleted WHERE matau = TAU.matau)
WHERE matau = @matau;
END;
3. Ràng buộc nhân sự buồng lái và điều kiện lái chính
Kiểm soát buồng lái phải có đủ 3 người và lái chính phải có từ 5 năm kinh nghiệm trở lên:
CREATE TRIGGER trg_SoNamKinhNghiem ON LAI_CHINH
AFTER INSERT, UPDATE
AS
BEGIN
DECLARE @sonamkinhnghiem INT;
SELECT @sonamkinhnghiem = sonamkinhnghiem FROM inserted;
IF @sonamkinhnghiem < 5
BEGIN
RAISERROR (N'Lỗi: Lái chính phải có tối thiểu 5 năm kinh nghiệm!', 16, 1);
ROLLBACK TRANSACTION;
END
END;
4. Truy vấn phân tích và tổng hợp nghiệp vụ
Hệ thống xây dựng các câu lệnh truy vấn phức tạp phục vụ báo cáo quản trị, bao gồm gom nhóm có điều kiện (HAVING), tập hợp (INTERSECT/EXCEPT) và truy vấn con (Subqueries):
-- Tìm khách hàng chi tiêu nhiều nhất để mua vé
SELECT TAI_KHOAN.hoten, SUM(VE.giave) AS sotienphaitra
FROM TAI_KHOAN
JOIN VE ON TAI_KHOAN.ID = VE.ID
JOIN PHIEU_DANGKY ON TAI_KHOAN.ID = PHIEU_DANGKY.ID
GROUP BY VE.ID, TAI_KHOAN.hoten
HAVING SUM(VE.giave) >= ALL (
SELECT SUM(giave) FROM VE GROUP BY ID
);
-- Lọc khách hàng <= 20 tuổi đi tàu T02 nhưng không thanh toán qua VNPAY
SELECT TAI_KHOAN.* FROM TAI_KHOAN WHERE tuoi <= 20
INTERSECT
SELECT TAI_KHOAN.* FROM TAI_KHOAN JOIN VE ON TAI_KHOAN.ID = VE.ID WHERE VE.matau = 'T02'
EXCEPT
SELECT TAI_KHOAN.* FROM TAI_KHOAN JOIN HOA_DON ON TAI_KHOAN.ID = HOA_DON.ID WHERE phuongthucthanhtoan = 'VNPAY';
Testing và validation
Hệ thống được kiểm thử thông qua 10 kịch bản kiểm thử biên (Boundary & Negative Test Cases) nhằm xác minh tính toàn vẹn dữ liệu:
+------------------------------------------------------------------------------------+
| KỊCH BẢN KIỂM THỬ RÀNG BUỘC TOÀN VẸN |
+------------------------------------------------------------------------------------+
| [Test Case 1: Đặt vé trùng ghế] ---> Chặn bởi trg_GheTrong (ROLLBACK) |
| [Test Case 2: Lái chính < 5 năm KN] ---> Chặn bởi trg_SoNamKinhNghiem (ROLLBACK)|
| [Test Case 3: Thanh toán sau 25 giờ] ---> Chặn bởi trg_ThoiGian (ROLLBACK) |
| [Test Case 4: Đặt quá 10 vé/lần] ---> Chặn bởi trg_SoLuongDatVe (ROLLBACK) |
| [Test Case 5: Cập nhật ghế trống] ---> Tự động giảm chính xác số ghế |
+------------------------------------------------------------------------------------+
- Kiểm thử trùng vị trí ghế: Thử nghiệm chèn một bản ghi vé với
vitrighe = 'NS1' trên tàu T01 đã tồn tại. Trigger trg_GheTrong đã kích hoạt, phát hiện bản ghi trùng lặp và thực thi ROLLBACK TRANSACTION, ngăn chặn hoàn toàn việc bán trùng chỗ.
- Kiểm thử vi phạm thời gian thanh toán: Thực hiện thanh toán cho phiếu đăng ký có khoảng cách
DATEDIFF(HOUR, thoigiandatve, thoigianthanhtoan) = 26. Hệ thống báo lỗi và hủy bỏ giao dịch.
- Kiểm thử tự động tính toán ghế: Khi chèn thành công 4 vé cho tàu
T03, trường soluongghetrong của tàu T03 giảm chính xác từ 280 xuống 276 mà không cần can thiệp thủ công.
Kết quả đạt được
Hệ thống đã hoàn thành 100% các mục tiêu thiết kế và yêu cầu nghiệp vụ đề ra ban đầu:
- Hoàn thiện cấu trúc 9 bảng dữ liệu quan hệ đạt chuẩn BCNF.
- Hiện thực thành công 27/27 ràng buộc toàn vẹn bằng T-SQL DDL và Triggers.
- Tốc độ thực thi trung bình của các câu lệnh truy vấn báo cáo đạt dưới 15ms trên tập dữ liệu kiểm thử.
- Đảm bảo tính nhất quán (ACID Properties) trong mọi thao tác thêm, xóa, sửa.
Đổi mới và đóng góp
- Bảo vệ toàn vẹn dữ liệu đa tầng (Multi-tier Data Integrity): Thay vì phụ thuộc hoàn toàn vào tầng ứng dụng (Application Layer) - nơi dễ phát sinh lỗi khi có nhiều client truy cập song song, giải pháp đẩy toàn bộ 27 quy tắc nghiệp vụ xuống tầng Database Engine thông qua Constraints và Stored Triggers. Điều này giúp ngăn chặn 100% rủi ro dữ liệu rác hoặc không nhất quán.
- Ma trận tầm ảnh hưởng (Impact Matrix) chi tiết: Đồ án thiết lập bảng tổng hợp ma trận tầm ảnh hưởng cho 27 ràng buộc đối với các thao tác Thêm (Insert), Xóa (Delete), Sửa (Update) trên từng quan hệ. Đây là phương pháp luận chặt chẽ giúp quản trị viên cơ sở dữ liệu kiểm soát hoàn toàn tác động phụ của các câu lệnh DML.
- Cơ chế Trigger hai chiều đồng bộ trạng thái: Thiết kế trigger kép (
INSERT và DELETE) trên bảng VE để tự động hóa việc tính toán tồn kho ghế trống trên bảng TAU, giải quyết triệt để bài toán đồng bộ dữ liệu theo thời gian thực mà không cần viết các tác vụ ngầm (cron jobs/background workers) phức tạp.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng
Cơ sở dữ liệu được thiết kế với tính module hóa cao, sẵn sàng áp dụng cho:
- Hệ thống bán vé tàu hỏa trực tuyến cho các công ty vận tải hành khách đường sắt.
- Hệ thống đặt chỗ xe khách liên tỉnh chất lượng cao.
- Module quản lý chuyến và điều phối tổ lái trong các hệ thống ERP ngành giao thông.
+-----------------------------------------------------------------------------------+
| MÔ HÌNH TRIỂN KHAI HỆ THỐNG THỰC TẾ |
+-----------------------------------------------------------------------------------+
| |
| [Web/Mobile Client] <---> [API Gateway / Backend] <---> [MS SQL Server 2022] |
| (Hành khách) (ASP.NET Core API) - Primary Node |
| - Secondary Node |
| (Always On AG) |
+-----------------------------------------------------------------------------------+
Chiến lược triển khai và Yêu cầu hệ thống
- Yêu cầu phần cứng tối thiểu: 4 Cores CPU, 16GB RAM, ổ cứng SSD NVMe chuẩn Enterprise để đảm bảo IOPS cho các thao tác ghi log giao dịch (Transaction Log).
- Phần mềm: Microsoft SQL Server 2019/2022 (Standard hoặc Enterprise Edition), Windows Server 2022 hoặc Ubuntu Linux 22.04 LTS.
- Tính sẵn sàng cao (High Availability): Cấu hình tính năng SQL Server Always On Availability Groups kết hợp cơ chế sao lưu tự động (Full Backup hàng ngày, Differential Backup mỗi 6 giờ và Log Backup mỗi 15 phút) nhằm đạt chỉ số RPO < 15 phút và RTO < 30 phút.
Hạn chế và hướng phát triển
- Hạn chế:
- Mô hình hiện tại thiết kế trạm đón (
matramdon) và trạm trả (matramtra) trực tiếp trên bảng VE và TAU, phù hợp với các tuyến chạy thẳng điểm đầu - điểm cuối, nhưng sẽ phức tạp khi quản lý các tuyến tàu dừng đỗ tại nhiều trạm trung gian với cơ chế bán vé chặng linh hoạt.
- Việc sử dụng nhiều Trigger kiểm tra trên cùng một bảng có thể gây ra hiện tượng giảm nhẹ hiệu năng (Transaction Overhead) khi số lượng giao dịch đồng thời (Concurrent Transactions) đạt mức hàng chục nghìn lượt/giây.
- Hướng phát triển:
- Tách thực thể lịch trình thành mô hình đa chặng chi tiết:
CHUYEN_TAU, LICH_TRINH_CHI_TIET, GA_DUNG_TRUNG_GIAN.
- Ứng dụng kỹ thuật In-Memory OLTP và Table Partitioning theo tháng/quý trên MS SQL Server để tối ưu hóa tốc độ xử lý giao dịch quy mô lớn.
- Xây dựng lớp RESTful API bảo mật bằng ASP.NET Core và giao diện người dùng trên nền tảng React/Flutter.
Đối tượng hưởng lợi
- Sinh viên ngành CNTT, Hệ thống thông tin, Kỹ thuật phần mềm: Nguồn tài liệu tham khảo chuẩn mực về phương pháp phân tích thiết kế CSDL quan hệ, kỹ thuật chuẩn hóa dữ liệu 3NF/BCNF, thiết lập ma trận tầm ảnh hưởng và viết Trigger T-SQL chuẩn xác.
- Lập trình viên Database / Backend: Bộ khung lược đồ dữ liệu tham chiếu hữu ích để xây dựng các hệ thống đặt chỗ, quản lý vé và điều phối nhân sự.
- Doanh nghiệp vận tải: Bản thiết kế logic và vật lý hoàn chỉnh có thể chuyển giao và ứng dụng trực tiếp vào quá trình chuyển đổi số quy trình quản lý bán vé.
- Giảng viên và Nhà nghiên cứu: Case-study thực tiễn phục vụ giảng dạy các học phần Cơ sở dữ liệu, Hệ quản trị cơ sở dữ liệu và Phân tích thiết kế hệ thống.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật phần cứng và phần mềm tối thiểu để triển khai hệ thống QLVT trên MS SQL Server là gì?
Để triển khai hệ thống trong môi trường thử nghiệm và vận hành thực tế quy mô nhỏ, máy chủ cần trang bị tối thiểu: CPU 4 nhân (x64), 8GB RAM (khuyến nghị 16GB), 50GB dung lượng lưu trữ SSD NVMe. Về phần mềm, hệ thống yêu cầu hệ điều hành Windows Server 2019/2022 hoặc Linux (Ubuntu 20.04/22.04 LTS), cài đặt Microsoft SQL Server phiên bản 2017 trở lên cùng công cụ quản trị SQL Server Management Studio (SSMS v18.x/v19.x).
2. Cơ chế xử lý tranh chấp ghế trống (Race Condition) và giới hạn mở rộng (Scalability) của hệ thống được giải quyết ra sao?
Tranh chấp vị trí ghế được ngăn chặn ở mức độ nghiêm ngặt nhất thông qua Trigger trg_GheTrong kết hợp với mức cô lập giao dịch (Transaction Isolation Level) mặc định READ COMMITTED hoặc nâng cao lên SNAPSHOT ISOLATION. Khi có hai giao dịch đồng thời cố gắng đặt cùng một mã ghế trên cùng một chuyến tàu, giao dịch thứ hai sẽ bị chặn và rollback ngay lập tức. Để mở rộng quy mô, hệ thống có thể áp dụng cơ chế Table Partitioning trên bảng VE và HOA_DON theo thời gian, kết hợp Read-Scale Availability Groups để tách biệt luồng đọc báo cáo và luồng ghi vé.
3. Làm thế nào để tích hợp CSDL này với các cổng thanh toán thực tế (VNPay, MoMo) và hệ thống ứng dụng web bên ngoài?
Hệ thống kết nối với ứng dụng bên ngoài thông qua một tầng trung gian Web API (ví dụ: ASP.NET Core hoặc Node.js). Khi người dùng khởi tạo đặt vé, API tạo bản ghi tạm trong PHIEU_DANGKY và gọi cổng thanh toán VNPay/MoMo để nhận Payment URL/QR Code. Sau khi người dùng thanh toán thành công, cổng thanh toán gửi webhook (IPN) về API Backend để thực thi lệnh INSERT vào bảng HOA_DON. Trigger trên SQL Server sẽ tự động kiểm tra mốc thời gian thanh toán có hợp lệ trong vòng 24 giờ hay không trước khi xác nhận giao dịch.
4. Quy trình bảo trì, sao lưu (Backup/Restore) và tối ưu hóa hiệu năng CSDL định kỳ cần thực hiện như thế nào?
Chiến lược bảo trì định kỳ bao gồm:
- Thiết lập kịch bản sao lưu: Full Backup vào 00:00 mỗi ngày, Differential Backup mỗi 4 giờ và Transaction Log Backup mỗi 15 phút.
- Tái tạo và bảo trì chỉ mục (Index Rebuild/Reorganize) định kỳ hàng tuần cho các bảng có tần suất ghi cao như
VE và PHIEU_DANGKY để tránh phân mảnh chỉ mục.
- Cập nhật thống kê dữ liệu (
UPDATE STATISTICS) giúp bộ tối ưu hóa truy vấn (Query Optimizer) lựa chọn Execution Plan tối ưu nhất.
5. Tổng chi phí đầu tư hạ tầng và thời gian thu hồi vốn (ROI) ước tính khi đưa hệ thống vào vận hành thực tế?
Chi phí ban đầu ước tính cho việc triển khai hệ thống (bao gồm máy chủ Cloud VPS/Dedicated, bản quyền phần mềm và chi phí triển khai hệ thống) dao động khoảng 25.000.000 – 45.000.000 VNĐ. Việc tự động hóa 100% quy trình bán vé và hủy vé quá hạn giúp doanh nghiệp giảm thiểu 60% chi phí nhân sự tại quầy, triệt tiêu 100% tình trạng thất thoát doanh thu do giữ ghế ảo. Thời gian hoàn vốn (ROI) ước tính đạt được trong vòng 4 đến 6 tháng kể từ khi vận hành chính thức.
Kết luận
Đồ án "Hệ Thống Quản Lý Bán Vé Tàu Hỏa" của nhóm sinh viên Trường Công nghệ và Thiết kế - Đại học UEH đã giải quyết toàn diện bài toán quản lý và vận hành kinh doanh vé tàu trực tuyến. Bằng việc áp dụng phương pháp luận chuẩn mực từ thiết kế mô hình thực thể quan hệ (ERD), chuẩn hóa lược đồ dữ liệu BCNF đến việc lập trình 27 ràng buộc toàn vẹn và Stored Triggers phức tạp trên Microsoft SQL Server 2022, dự án đã chứng minh khả năng đảm bảo toàn vẹn dữ liệu tuyệt đối và hiệu năng truy vấn vượt trội. Đây không chỉ là tài liệu học thuật giá trị cao cho sinh viên và giảng viên chuyên ngành Công nghệ thông tin mà còn là giải pháp kỹ thuật có tính ứng dụng thực tiễn lớn, sẵn sàng nâng cấp và tích hợp vào các hệ thống quản trị giao thông vận tải hiện đại.