ทีมออกแบบฐานข้อมูลสำหรับระบบ Audit Log ต้องการเก็บประวัติการเปลี่ยนแปลงข้อมูลในตาราง Employee (EmployeeID, Name, Salary, Department) ควรเลือกรูปแบบใดในการออกแบบตาราง Audit
กสร้างตาราง EmployeeAudit (AuditID, EmployeeID, ColumnName, OldValue, NewValue, ChangedBy, ChangedAt) เนื่องจากยืดหยุ่นกว่า และใช้ได้กับทุกตาราง
ขสร้างตาราง EmployeeHistory (HistoryID, EmployeeID, Name, Salary, Department, ValidFrom, ValidTo, ChangedBy) เนื่องจากสามารถ Query ข้อมูล ณ เวลาใดก็ได้ง่ายกว่า
คใช้รูปแบบ EAV (Entity-Attribute-Value) ยืดหยุ่นกว่าแต่ Query ยากและช้ากว่า; ใช้ Temporal Table Pattern สำหรับ Point-in-Time Query แต่ใช้พื้นที่มากกว่า การเลือกขึ้นอยู่กับ Use Case
งควรใช้ Database Trigger บันทึก Log ไปยัง Log File แทนการสร้างตาราง Audit
เฉลยอธิบาย
แบบ A ใช้รูปแบบ EAV (Entity-Attribute-Value) ซึ่งยืดหยุ่นมาก ใช้ได้กับทุกตาราง แต่การ Query ข้อมูลซับซ้อน เช่น ต้องการสถานะพนักงาน ณ วันที่หนึ่งต้อง Pivot ข้อมูล แบบ B ใช้ Temporal Table Pattern ซึ่ง Query ง่าย เช่น WHERE ValidFrom <= '2024-01-01' AND ValidTo > '2024-01-01' แต่ใช้พื้นที่มากกว่าเพราะเก็บทุกคอลัมน์ทุกครั้ง การเลือกขึ้นอยู่กับว่าต้องการ Point-in-Time Query บ่อยแค่ไหน ตัวเลือก D ผิดเพราะ Log File ไม่ใช่การออกแบบฐานข้อมูลที่ดีสำหรับ Audit