PlusMagi's Blog By Pitt Phunsanit Backend,Database Tabulator: common configuration

Tabulator: common configuration

ในฐานะนักพัฒนาระบบที่ต้องทำงานกับฐานข้อมูลขนาดใหญ่ การเขียนโค้ด SQL ที่มีประสิทธิภาพและบำรุงรักษาง่ายถือเป็นหัวใจสำคัญของสถาปัตยกรรมที่ดี อย่างไรก็ตาม เมื่อโปรเจกต์ขยายตัว เรามักจะเจอปัญหาที่เรียกว่าการทำซ้ำ (Repetition) หรือที่รู้จักกันในหลักการ DRY (Don’t Repeat Yourself) เมื่อเราต้องเขียนเงื่อนไขการกรองข้อมูล (Filtering Logic) หรือการคำนวณค่าบางอย่างซ้ำ ๆ ในหลาย ๆ ส่วนของแอปพลิเคชัน

หากเราปล่อยให้โค้ดเหล่านั้นกระจัดกระจาย การแก้ไขเพียงจุดเดียวอาจส่งผลกระทบให้เราต้องไล่แก้โค้ดในหลาย ๆ ที่ ซึ่งเพิ่มความเสี่ยงของ Bug และลดความเร็วในการพัฒนา บทความนี้จะพาคุณไปดูวิธีใช้หลักการ Common Configuration ใน PostgreSQL เพื่อให้โค้ดของคุณเป็นระเบียบ ปลอดภัย และง่ายต่อการบำรุงรักษาในระดับ Senior Architect

💡 หลักการ Common Configuration ใน PostgreSQL

ในบริบทของ PostgreSQL การทำ Common Configuration ไม่ได้หมายถึงการกำหนดค่าตัวแปรทั่วไปเท่านั้น แต่หมายถึงการห่อหุ้ม (Encapsulation) ชุดคำสั่ง SQL ที่ใช้ร่วมกันบ่อย ๆ ให้กลายเป็นองค์ประกอบที่สามารถเรียกใช้ซ้ำได้ (Reusable Component) เครื่องมือหลักที่เราจะใช้คือ Stored Procedures และ Functions (PL/pgSQL) ซึ่งทำหน้าที่เป็นเหมือน ‘โมดูล’ ที่บรรจุตรรกะทางธุรกิจที่ซับซ้อนเอาไว้

✅ การใช้ Function เพื่อลดความซ้ำซ้อน (DRY Principle)

สมมติว่าคุณมีตาราง `orders` และคุณต้องกรองข้อมูลลูกค้าที่อยู่ในสถานะ ‘Active’ และมีรายการสั่งซื้อที่เกิดขึ้นในช่วงเวลาที่กำหนด การเขียนเงื่อนไขนี้ซ้ำ ๆ ในทุก Query ถือเป็นการทำซ้ำที่ไม่จำเป็น เราสามารถสร้างฟังก์ชันที่รับพารามิเตอร์ที่จำเป็นเหล่านี้เข้าไป แล้วให้ฟังก์ชันนั้นจัดการการ Query ทั้งหมดให้เรา

ตัวอย่างการสร้าง Function ใน PostgreSQL:

SQL

-- 1. สร้างฟังก์ชันที่รับวันที่เริ่มต้นและสถานะผู้ใช้เป็นพารามิเตอร์<br>CREATE OR REPLACE FUNCTION get_filtered_orders(p_start_date DATE, p_status VARCHAR) <code>
RETURNS TABLE (order_id INT, user_id INT, order_date DATE, total_amount NUMERIC) AS $$
BEGIN
    RETURN QUERY
    SELECT
        o.id,
        o.user_id,
        o.order_date,
        o.total
    FROM
        orders o
    JOIN
        users u ON o.user_id = u.id
    WHERE
        u.status = p_status
        AND o.order_date >= p_start_date;
END;$$
LANGUAGE plpgsql;

-- 2. การเรียกใช้ Function แทนการเขียน Query ยาวๆ<br>-- หากต้องการดึงข้อมูลเฉพาะผู้ใช้ที่ Active ตั้งแต่ต้นปี 2023<br>SELECT * FROM get_filtered_orders('2023-01-01', 'active');

ประโยชน์ที่ได้:

  • Maintainability: หากเงื่อนไขการกรองข้อมูลมีการเปลี่ยนแปลง (เช่น ต้องเพิ่มการตรวจสอบ `is_verified`) คุณเพียงแค่แก้ไขโค้ดในฟังก์ชันเดียวเท่านั้น
  • Readability: โค้ดหลักของคุณจะสะอาดขึ้นมาก เพราะแทนที่จะมีเงื่อนไข `WHERE` ที่ยาวเหยียด คุณเพียงแค่เรียกใช้ `SELECT * FROM function_name(…)`
  • Performance: การห่อหุ้มตรรกะที่ซับซ้อนช่วยให้เราควบคุมการทำงานของ Database Engine ได้อย่างแม่นยำ

🚀 บทสรุป: การยกระดับสถาปัตยกรรมด้วย PostgreSQL Functions

การใช้ Common Configuration ผ่าน PostgreSQL Functions ไม่ใช่แค่การทำให้โค้ดดูดีขึ้นเท่านั้น แต่เป็นการยกระดับสถาปัตยกรรมของแอปพลิเคชันคุณให้มีความเป็นระบบ (Systematic) และทนทานต่อการเปลี่ยนแปลง (Resilient) ในฐานะ Senior Architect การคิดถึงการนำตรรกะทางธุรกิจที่ใช้ร่วมกันมาห่อหุ้มไว้ใน Functions คือก้าวสำคัญที่ช่วยให้ทีมพัฒนาสามารถทำงานได้อย่างรวดเร็ว ลดข้อผิดพลาด และมั่นใจได้ว่าฐานข้อมูลของคุณจะถูกดูแลด้วยมาตรฐานสูงสุด