ในฐานะนักพัฒนาระบบที่ต้องทำงานกับฐานข้อมูลขนาดใหญ่ การเขียนโค้ด 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 คือก้าวสำคัญที่ช่วยให้ทีมพัฒนาสามารถทำงานได้อย่างรวดเร็ว ลดข้อผิดพลาด และมั่นใจได้ว่าฐานข้อมูลของคุณจะถูกดูแลด้วยมาตรฐานสูงสุด