開發車票管理系統,包含「車次表」與「車票表」。車次表中可設定座位總數(如 20 個),需自動在車票表生成對應數量的車票記錄,每張票僅「票號」與「座位號」不同,其餘字段(車次、發車時間、票價等)相同。
在車次表插入或更新座位數時,由資料庫層面自動批量生成車票記錄,避免應用層循環寫入的性能開銷。
-- MySQL 示例
CREATE TRIGGER after_train_insert
AFTER INSERT ON train_schedule
FOR EACH ROW
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= NEW.seat_count DO
INSERT INTO tickets (train_id, seat_no, ticket_no, status)
VALUES (NEW.id, i, CONCAT(NEW.train_code, LPAD(i,3,'0')), 'available');
SET i = i + 1;
END WHILE;
END;
若業務邏輯較複雜(如需分配座位類型、價格梯度),在 Service 層組裝 List<Ticket> 後使用 batchInsert(MyBatis `
若車票數據量極大且查詢頻繁,可不物理存儲每張票,改用「車次+座位號」組合鍵動態計算,通過視圖暴露給上層。但需注意:訂單、鎖座等寫操作仍需實體表支持並發控制。
核心原則是「數據庫層面自動化生成基礎數據,應用層專注業務流程控制」。優先採用觸發器或存儲過程實現座位數到車票的映射,配合批量操作與並發控制,可顯著降低開發複雜度並提升系統吞吐量。