ในฐานะ System Specialist และ Senior Architect การออกแบบระบบฐานข้อมูลที่ยอดเยี่ยมไม่ได้วัดแค่ที่ประสิทธิภาพ (Performance) เท่านั้น แต่ยังรวมถึงความสามารถในการทำความเข้าใจ (Understandability) และความง่ายในการอ่าน (Readability) ของโค้ดและโครงสร้างข้อมูลด้วย
สำหรับนักพัฒนาและผู้ดูแลระบบที่ต้องทำงานกับ PostgreSQL เป็นประจำ การเขียน Query ที่ซับซ้อนโดยขาดความชัดเจน เปรียบเสมือนการเขียนภาษาที่ไม่มีไวยากรณ์ ทำให้การบำรุงรักษา (Maintenance) ในอนาคตเป็นเรื่องยากยิ่ง หัวข้อนี้จึงมุ่งเน้นไปที่หลักการทำให้ PostgreSQL สามารถทำงานที่ซับซ้อนได้อย่าง ‘เข้าใจได้’ (Understandable) โดยใช้หลักการ Plain Language ในการออกแบบโค้ด SQL
💡 หลักการทำให้ PostgreSQL Query อ่านง่าย (Readability Principles)
การทำให้ Query อ่านง่ายในบริบทของ PostgreSQL คือการจัดโครงสร้างโค้ดให้เลียนแบบลำดับความคิดของมนุษย์ โดยมีหลักการสำคัญดังนี้:
- การตั้งชื่อที่สื่อความหมาย (Semantic Naming): ตั้งชื่อตาราง (Table) และคอลัมน์ (Column) ให้ชัดเจน เช่น แทนที่จะใช้ `tbl_data_01` ควรใช้ `user_records` หรือ `transaction_details`
- การจัดโครงสร้างด้วย CTEs (Common Table Expressions): นี่คือหัวใจสำคัญที่สุดในการเพิ่มความสามารถในการอ่านของ Query โดยการใช้ `WITH` clause ช่วยให้เราสามารถแบ่ง Query ที่ซับซ้อนออกเป็นขั้นตอนย่อยๆ ที่มีชื่อกำกับ ทำให้ผู้อ่านทราบว่าแต่ละส่วนของข้อมูลถูกประมวลผลอย่างไร
- การใช้ Comments: แม้ว่า SQL จะไม่มีไวยากรณ์ Comment สำหรับการทำงาน แต่การใส่ Comment อธิบายวัตถุประสงค์ของ Query ในส่วนที่สำคัญจะช่วยให้ความเข้าใจเพิ่มขึ้นมาก
⚙️ ตัวอย่างการปรับปรุง Query ให้เข้าใจง่ายด้วย CTEs
สมมติว่าเรามี Query ที่ซับซ้อนที่ต้องกรองข้อมูลผู้ใช้และคำนวณยอดรวมการซื้อขาย การใช้ CTE จะช่วยให้เราแยกขั้นตอนการกรองและการคำนวณออกจากกันอย่างชัดเจน ทำให้โค้ดอ่านง่ายเหมือนการอ่านรายงานทางธุรกิจ:
SQL
-- 1. กำหนดขั้นตอนที่ 1: กรองเฉพาะผู้ใช้ที่อยู่ในเขต 'Bangkok' และมีสถานะ 'Active' (Understandable Step)
WITH active_users AS (
SELECT user_id, user_name, region
FROM users
WHERE region = 'Bangkok' AND status = 'Active'
),
-- 2. กำหนดขั้นตอนที่ 2: คำนวณยอดรวมการซื้อขายสำหรับผู้ใช้ที่ผ่านการกรองแล้ว (Calculate Total Sales)
calculated_sales AS (
SELECT
u.user_id,
u.user_name,
SUM(t.amount) AS total_spent
FROM users u
JOIN transactions t ON u.user_id = t.user_id
WHERE u.user_id IN (SELECT user_id FROM active_users)
GROUP BY u.user_id, u.user_name
)
-- 3. ขั้นตอนสุดท้าย: เลือกผลลัพธ์ที่ต้องการ (Final Output)
SELECT
user_name,
total_spent
FROM calculated_sales
WHERE total_spent > 100.00;
จากตัวอย่างข้างต้น การใช้ `WITH` clause ทำให้ Query ถูกแบ่งออกเป็นบล็อกที่ชื่อว่า `active_users` และ `calculated_sales` อย่างชัดเจน ทำให้ผู้ที่อ่านโค้ดไม่จำเป็นต้องไล่ตามตรรกะที่ซับซ้อนในบล็อกเดียว
✅ บทสรุป: Readability คือองค์ประกอบทางสถาปัตยกรรม
การให้ความสำคัญกับ Readability ใน PostgreSQL ไม่ใช่เพียงแค่การจัดรูปแบบโค้ด แต่เป็นการยกระดับมาตรฐานทางสถาปัตยกรรม (Architectural Standard) ของฐานข้อมูล การใช้ CTEs, การตั้งชื่อที่สื่อความหมาย, และการจัดโครงสร้างที่เป็นระเบียบ จะช่วยลด Learning Curve สำหรับนักพัฒนาคนใหม่ และทำให้ระบบฐานข้อมูลมีความยั่งยืน (Sustainable) ในระยะยาว ซึ่งเป็นหัวใจสำคัญของระบบระดับ Senior Architect อย่างแท้จริง