ในโลกของการจัดการข้อมูลยุคปัจจุบัน ข้อมูลไม่ได้เป็นเพียงแค่ตัวเลขหรือข้อความ แต่คือสินทรัพย์ที่มีมูลค่าสูง การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับฐานข้อมูล ไม่ว่าจะเล็กน้อยเพียงใด ล้วนส่งผลกระทบต่อความน่าเชื่อถือและความถูกต้องของระบบ หากเราไม่สามารถระบุได้ว่าใครเป็นผู้แก้ไขอะไร เมื่อไหร่ และทำไม ข้อมูลเหล่านั้นก็จะขาดหลักฐานการตรวจสอบที่สำคัญ
เจาะลึกรายละเอียดและประเด็นสำคัญ
หัวใจของการเก็บรักษาประวัติการเปลี่ยนแปลงข้อมูล (Data History) คือกลไกที่เรียกว่า “Trigger” ในฐานข้อมูลเชิงสัมพันธ์ Trigger เป็นชุดคำสั่งที่ถูกผูกติดกับตารางใดตารางหนึ่ง และจะทำงานโดยอัตโนมัติเมื่อมีการดำเนินการระดับ Data Manipulation Language (DML) เช่น INSERT, UPDATE หรือ DELETE โดยที่เราไม่จำเป็นต้องเขียนโค้ดเรียกใช้มันด้วยตนเอง
การทำ Audit Log ด้วย Trigger จะอาศัยแนวคิดของ Pseudo-Records คือการเข้าถึงข้อมูลก่อนการเปลี่ยนแปลง (OLD) และข้อมูลหลังการเปลี่ยนแปลง (NEW) ทำให้เราสามารถบันทึกค่าเดิมและค่าใหม่ลงในตาราง History แยกต่างหากได้อย่างสมบูรณ์ การออกแบบที่ถูกต้องจึงต้องคำนึงถึงประสิทธิภาพ เพื่อไม่ให้ Trigger กลายเป็นคอขวดในการทำงานของระบบหลัก
SQL
-- ตัวอย่างการสร้าง Audit Log Trigger สำหรับตาราง 'Products'
CREATE TABLE Product_Audit (
log_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
action VARCHAR(10) NOT NULL, -- INSERT, UPDATE, DELETE
old_data JSON,
new_data JSON,
changed_by VARCHAR(100),
change_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Trigger สำหรับการอัปเดตข้อมูล (UPDATE)
CREATE TRIGGER trg_product_update
AFTER UPDATE ON Products
FOR EACH ROW
BEGIN
INSERT INTO Product_Audit (product_id, action, old_data, new_data, changed_by)
VALUES (:OLD.product_id, 'UPDATE', JSON_OBJECT('col1', :OLD.col1, 'col2', :OLD.col2), JSON_OBJECT('col1', NEW.col1, 'col2', NEW.col2), USER());
END;