PlusMagi's Blog By Pitt Phunsanit Backend UML: Timing Diagram แผนภาพแสดงการเปลี่ยนแปลงสถานะของอ็อบเจ็กต์เทียบกับเวลา

UML: Timing Diagram แผนภาพแสดงการเปลี่ยนแปลงสถานะของอ็อบเจ็กต์เทียบกับเวลา

ในโลกของการออกแบบระบบซอฟต์แวร์ระดับ Enterprise ที่ความแม่นยำของลำดับเหตุการณ์ (Sequence) และช่วงเวลา (Timing) มีความสำคัญอย่างยิ่งยวด การทำความเข้าใจว่าอ็อบเจ็กต์หนึ่งๆ จะเปลี่ยนสถานะอย่างไรเมื่อเวลาผ่านไปและได้รับเหตุการณ์ภายนอกใดๆ คือหัวใจหลักของการวิเคราะห์ระบบ

UML Timing Diagram คืออะไร?

UML Timing Diagram คือแผนภาพที่ใช้ในการแสดงพลวัตเชิงเวลา (Temporal Dynamics) ของระบบ โดยเน้นการติดตามการเปลี่ยนแปลงสถานะ (State Changes) ของอ็อบเจ็กต์ต่างๆ เมื่อเวลาเดินไป แผนภาพนี้ช่วยให้สถาปนิกสามารถระบุได้ว่า เหตุการณ์ A ต้องเกิดขึ้นก่อนเหตุการณ์ B หรือไม่ และการหน่วงเวลา (Latency) ในแต่ละขั้นตอนส่งผลกระทบต่อผลลัพธ์สุดท้ายอย่างไร

การประยุกต์ใช้แนวคิด Timing Diagram กับ PostgreSQL

แม้ว่า PostgreSQL จะเป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database) ไม่ใช่เครื่องมือวาดแผนภาพ UML โดยตรง แต่หลักการของ Timing Diagram สามารถถูกจำลองและวิเคราะห์ได้อย่างสมบูรณ์แบบด้วยการใช้คุณสมบัติทางเวลาของฐานข้อมูล (Temporal Data Features) เช่น การบันทึกช่วงเวลา (Start/End Timestamps) และการจัดการ Transaction Log

ในฐานะ System Specialist เราจะใช้ PostgreSQL เพื่อสร้างตารางที่ทำหน้าที่เป็น ‘บันทึกสถานะ’ (State Log) ซึ่งแต่ละแถวข้อมูลจะแทนการเปลี่ยนสถานะของอ็อบเจ็กต์หนึ่งๆ ในช่วงเวลาที่กำหนด ทำให้เราสามารถ Query เพื่อสร้าง ‘Timeline’ ของระบบได้

ตัวอย่างการจำลองสถานะด้วย PostgreSQL

สมมติว่าเราต้องการติดตามสถานะของคำสั่งซื้อ (Order) ตั้งแต่ ‘Pending’ ไปจนถึง ‘Shipped’ โดยใช้เวลาเป็นแกนหลัก:

SQL

-- 1. สร้างตารางเพื่อบันทึกการเปลี่ยนแปลงสถานะตามเวลา (Temporal Log Table) </code>
CREATE TABLE order_state_log (
    order_id INT,
    state_name VARCHAR(50),
    start_time TIMESTAMP WITHOUT TIME ZONE,
    end_time TIMESTAMP WITHOUT TIME ZONE
);

-- 2. จำลองเหตุการณ์ที่ 1: สถานะเริ่มต้น (Pending)
INSERT INTO order_state_log (order_id, state_name, start_time, end_time)
VALUES (1001, 'Pending', '2023-10-25 08:00:00', '2023-10-25 09:00:00');

-- 3. จำลองเหตุการณ์ที่ 2: การประมวลผล (Processing) - เกิดขึ้นหลังจาก Pending
INSERT INTO order_state_log (order_id, state_name, start_time, end_time)
VALUES (1001, 'Processing', '2023-10-25 09:00:00', '2023-10-25 11:30:00');

-- 4. จำลองเหตุการณ์ที่ 3: การจัดส่ง (Shipped) - สถานะปัจจุบัน
INSERT INTO order_state_log (order_id, state_name, start_time, end_time)
VALUES (1001, 'Shipped', '2023-10-25 11:30:00', NULL);

-- 5. Query เพื่อดู Timeline ของ Order 1001

การใช้ `start_time` และ `end_time` ในการ Query ทำให้เราสามารถสร้างมุมมองเชิงเวลาที่แม่นยำ ซึ่งเลียนแบบการทำงานของ Timing Diagram ได้อย่างสมบูรณ์แบบ

บทสรุป

การทำความเข้าใจ Timing Diagram ไม่ได้จำกัดอยู่แค่ในแผนภาพ UML เท่านั้น แต่เป็นหลักการทางสถาปัตยกรรมที่สำคัญในการออกแบบระบบใดๆ ก็ตาม สำหรับนักพัฒนาที่ใช้ PostgreSQL การจัดการข้อมูลสถานะและเวลาด้วยการบันทึกช่วงเวลา (Temporal Logging) คือวิธีปฏิบัติที่ดีที่สุดในการรับประกันความถูกต้องของลำดับเหตุการณ์ (Event Sequencing) และช่วยให้ระบบมีความน่าเชื่อถือและสามารถ Audit ได้อย่างสมบูรณ์